Tag: 哈希

按此顺序组合2个哈希的最佳方法

我有2个哈希list1和list2。 密钥是用户ID。 这是一个例子 list1 = { ‘1’ => [item1, item2], ‘2’ => [item3] } list2 = { ‘1’ => [item 4], ‘3’ => [item 5] } 我需要将2到1的列表结合起来..这样的事情……或任何更好的表示赞赏。 基本上,需要将每个用户的list1和list2项组合成一个数组,其中第一项给出list1项,第二项给我list2项。 { ‘1’ => [[item 1, item 2], [item 4], ‘2’ => [[item 3],[]], ‘3’ => [[],[item 5]] } 我能够以老式的方式做到这一点,但想知道是否有最好的方法来做这个…想知道我是否可以最小化代码和处理。

使用Javascript解析Ruby哈希文字

我需要在Web表单中获取原始客户端文本,并将其作为JSON发送回Tomcat servlet。 由于遗留原因,此输入可以格式化为Ruby哈希。 我也无法强迫我的客户将他们现有的Ruby格式的输入转换为JSON。 我可以编写一个自定义解析器,但我想看看是否存在一个基于JavaScript的解决方案,它允许我确定一个文本blob是否是Ruby哈希,如果是,则将其转换为JSON。

从给定值构造新哈希

我似乎失去了试图实现以下,我整天试着请帮助 我有 h = { “kv1001″=> { “impressions”=>{“b”=>0.245, “a”=>0.754}, “visitors” =>{“b”=>0.288, “a”=>0.711}, “ctr” =>{“b”=>0.003, “a”=>0.003}, “inScreen”=>{“b”=>3.95, “a”=>5.031} }, “kv1002″=> { “impressions”=>{“c”=>0.930, “d”=>0.035, “a”=>0.004, “b”=>0.019,”e”=>0.010}, “visitors”=>{“c”=>0.905, “d”=>0.048, “a”=>0.005, “b”=>0.026, “e”=>0.013}, “ctr”=>{“c”=>0.003, “d”=>0.006, “a”=>0.004, “b”=>0.003, “e”=>0.005}, “inScreen”=>{“c”=>4.731, “d”=>4.691, “a”=>5.533, “b”=>6.025, “e”=>5.546} } } 我的目标 { “segment”=>”kv1001=a”, “impressions”=>”0.754”, “visitors”=>”0.711”, “inScreen”=>”5.031”, “ctr”=>”0.003” }, { “segment”=>”kv1001=b”, “impressions”=>”0.245”, “visitors”=>”0.288”, “inScreen”=>”3.95”, “ctr”=>”0.003” […]

哈希默认值未被使用

今天我尝试了下面的代码片段,我不明白为什么我们之间会得到不同的结果。 据我所知,他们是一样的。 一个使用Hash的默认值,另一个片段在访问密钥之前为密钥创建一个空数组。 任何了解发生了什么的人? 🙂 # Hash default if the key doesn’t have a value set is an empty Array a = Hash.new([]) a[:key] < [2] pa # => {} nil pa[:key] # => [2] p a.keys # => [] p a.values # => [] # Explicitly add an array for all nodes before creating […]

使用相应模型中的方法对哈希进行排序

假设您有一个具有属性“age”的模型Dog,这是一种确定“吠叫频率”的方法: class Dog { order(‘age ASC’) } def barking_frequency # some code end end 在您的控制器中,您有: def index @dogs = Dog.by_age end 一旦你有@dogs的哈希值,你如何通过barking_frequency对它进行排序,这样结果就可以将特定年龄的狗排在一起,如下所示: Name Age Barking Frequency Molly 2 1 Buster 2 4 Jackie 2 7 Dirk 3 1 Hank 3 3 Jake 3 4 Spot 10 0

在Ruby中获取用于哈希中的键的特定对象的便捷方式?

这是一个有趣的一个,我在一个桶分片系统中有一个场景,我正在编写我维护索引哈希和存储哈希的地方,相互关系是一个UUID生成,因为这是分布式的,我希望有一些信心,新的桶获得独特的引用。 在本练习的早期,我开始优化代码以冻结SecureRandom.uuid生成的所有密钥(它会生成字符串),因为当您使用字符串作为哈希中的密钥时,会被欺骗并自动冻结以确保无法更改。 (如果它是一个字符串而不是冻结的)。 在大多数情况下,很容易积极地执行此操作,特别是对于新的UUID(实际上在我的项目中,许多此类值需要这种处理)但在某些情况下,我发现我必须接近通过网络传递的值的哈希值然后获取,为了确保一致地使用任何作为键的字符串,使用相当钝的查找机制。 我的目标是,因为我希望这能够在多个节点上维护一个庞大的数据集,以尽可能地减少密钥和索引存储的开销,并且因为它是一个存储系统,所以可以多次引用相同的UUID,因此它是有助于使用相同的参考。 这里有一些代码以简单(ish)forms演示了这个问题。 我只想询问是否有更优化和方便的机制来获取具有相同字符串值的键的任何预先存在的对象引用(对于键名而不是关联的值)。 # Demonstrate the issue.. require ‘securerandom’ index = Hash.new store = Hash.new key = ‘meh’ value = 1 uuid = SecureRandom.uuid puts “Ruby dups and freezes strings if used for keys in hashes” puts “This produces different IDs” store[uuid] = value index[key] = uuid store.each_key { |x| puts […]

奇怪的Ruby语法?

我正在ruby-lang.org上做Ruby 20分钟的教程,我发现这个代码搞乱了irb: irb(main):015:0> def h(name) irb(main):016:1> puts “Hello #{name}!” irb(main):017:1> end 根据解释, #{name}部分只是将变量添加到字符串中? 我认为这是一种奇怪而冗长的编写方式所以我只是想我会尝试”Hello” + name ,它的工作方式完全一样.. 我用Google搜索试图找到#{}的含义,我找不到任何关于它的事情,所以我想我会问社区..有什么区别? 有吗? 提前致谢!

比较哈希数组并打印预期和实际结果

我有2个哈希数组: actual = [{“column_name”=>”NONINTERESTINCOME”, “column_data_type”=>”NUMBER”}, {“column_name”=>”NONINTERESTEXPENSE”, “column_data_type”=>”VARCHAR”}, {“column_name”=>”TRANSACTIONDATE”, “column_data_type”=>”TIMESTAMP”}, {“column_name”=>”UPDATEDATE”, “column_data_type”=>”TIMESTAMP”}] expected = [{“column_name”=>”NONINTERESTINCOME”, “column_data_type”=>”NUMBER”}, {“column_name”=>”NONINTERESTEXPENSE”, “column_data_type”=>”NUMBER”}, {“column_name”=>”TRANSACTIONDATE”, “column_data_type”=>”NUMBER”}, {“column_name”=>”UPDATEDATE”, “column_data_type”=>”TIMESTAMP”}] 我需要比较这两个哈希值,找出column_data_type不同的哈希值。 比较我们可以直接使用: diff = actual – expected 这会将输出打印为: {“column_name”=>”NONINTERESTEXPENSE”, “column_data_type”=>”VARCHAR”} {“column_name”=>”TRANSACTIONDATE”, “column_data_type”=>”TIMESTAMP”} 我的预期输出是在结果中我想打印实际和预期的数据类型,意味着实际和预期的哈希数组中缺少的`column_name’的数据类型,如: {“column_name”=>”NONINTERESTEXPENSE”, “expected_column_data_type”=>”NUMBER”, “actual_column_data_type” => “VARCHAR”} {“column_name”=>”TRANSACTIONDATE”, “expected_column_data_type”=>”NUMBER”,”actual_column_data_type” => “TIMESTAMP” }

字符串到哈希转换

我怎么能把字符串转换为哈希? 现在我使用: eval “{‘1627207:28320’=>’text’}” => {‘1627207:28320’=>’text’} 但“eval”对我的情况不利 – 从params传递的字符串,这种情况并不安全 编辑: 传递字符串也可以是: “{‘1627207’=>’text’, ’11:167:28320’=>’text 1 / text 2 / unicode=>привет!’}” 然后需要结果哈希: {‘1627207:28320’=>’text’, ’11:167:28320’=>’text 1 / text 2 / unicode=>привет!’}

处理嵌套哈希以将所有值转换为字符串

我有以下代码,它采用哈希并将所有值转换为字符串。 def stringify_values obj @values ||= obj.clone obj.each do |k, v| if v.is_a?(Hash) @values[k] = stringify_values(v) else @values[k] = v.to_s end end return @values end 所以给出以下哈希: { post: { id: 123, text: ‘foobar’, } } 我得到了YAML输出 — &1 :post: *1 :id: ‘123’ :text: ‘foobar’ 当我想要这个输出 — :post: :id: ‘123’ :text: ‘foobar’ 看起来该对象已被展平,然后被赋予对自身的引用,这导致我的规范中的堆栈级错误。 如何获得所需的输出?