Tag: 哈希

为什么Enumerable#find /#detect即使在Hash上调用也会返回一个数组?

Enumerable#find / #detect的文档说: find(ifnone = nil) { |obj| block } → obj or nil find(ifnone = nil) → an_enumerator 将枚举中的每个条目传递给块 。 返回第一个块不为false的块。 如果没有对象匹配,则调用ifnone并在指定时返回其结果,否则返回nil 。 但是,当在Hash上调用它时,结果将类型更改为Array而不是原始Hash。 是关于此数据类型的一些实现错误还是一些历史约定? {a: ‘a’, b:’b’}.find {|k, v| v == ‘b’} # => [:b, ‘b’]

Ruby:一次从字符串和两个数组值构建哈希

我正在尝试使用以下方法构建哈希: hash = {} strings = [“one”, “two”, “three”] array = [1, 2, 3, 4, 5, 6] 所以我最终得到: hash = { “one” => [1, 2] , “two” => [3, 4] , “three” => [5, 6] } 我试过了: strings.each do |string| array.each_slice(2) do |numbers| hash[string] = [numbers[0], numbers[1]] end end 但是产量: hash = { “one” => […]

如何合并在ruby中具有相同键的两个哈希

我有两个哈希应该有相同的键,如: a = {a: 1, b: 2, c: 3} b = {a: 2, b: 3, c: 4} 我想总结这样的每个值: if a.keys == b.keys a.values.zip(b.values).map{|a, b| a+b} end 但是如果键的顺序不同,则此代码不起作用,如b = {a: 2, c: 4, b: 3} 。 如何在考虑密钥顺序的情况下编写代码?

如何将文件的元素放入哈希? -ruby

所以我有一个文件forms: Key1 Value1 Key2 Value2 Key3 Value3 由选项卡分隔。 我的问题是如何打开此文件并将其放入哈希? 我试过这样做: fp = File.open(file_path) fp.each do |line| value = line.chomp.split(“\t”) hash = Hash[*value.flatten] end 但是在这个循环结束时,@ datata散列只包含最新的条目……我有点想要它……

如何获得JavaScript样式的哈希访问?

我知道ActiveSupport提供的这个function。 h = ActiveSupport::OrderedOptions.new h.boy = ‘John’ h.girl = ‘Mary’ h.boy # => ‘John’ h.girl # => ‘Mary’ 但是我已经有一个大哈希,我想使用点表示法访问该哈希。 这是我试过的: large_hash = {boy: ‘John’, girl: ‘Mary’} h = ActiveSupport::OrderedOptions.new(large_hash) h.boy # => nil 那没用。 我怎样才能做到这一点。 我正在使用ruby 1.9.2 更新: 对不起我应该提到我不能使用openstruct,因为它没有Struct所具有的each_pair方法。 我事先不知道密钥所以我不能使用openstruct。

需要帮助获取嵌套的ruby哈希层次结构

我有哈希深度嵌套哈希,我希望每个键的层次结构(父对子)作为数组。 例如 – hash = { “properties”=>{ “one”=>”extra”, “headers”=>{ “type”=>”object”, “type1″=>”object2” }, “entity”=>{ “type”=>”entype” }, }, “sec_prop”=>”hmmm” } 对于这个哈希,我希望输出如下所示,作为每个键的单独数组。 [properties,one] [properties,headers,type] [properties,headers,type1] [properties,entity,type] [sec_prop] 我一直在尝试并通过一些递归方法搜索这个,但它似乎不适合我任何帮助将不胜感激。 这里需要注意的重要一点是,在嵌套中存在相同哈希中的重复键,例如在头和实体中重复键入键。 所以我需要适当的层次结构来识别正确的密钥 我应该只为那些值不是另一个哈希的键得到这个层次结构数组。 它应该采用上面给出的格式,但也欢迎任何其他解决方案 谢谢。!

如何解析哈希的字符串表示

我有这个字符串,我想知道如何将其转换为哈希。 “{:account_id=>4444, :deposit_id=>3333}”

按值排序散列哈希(并返回散列,而不是数组)

我有以下哈希: user = { ‘user’ => { ‘title’ => {‘weight’ => 1, …. } ‘body’ => {‘weight’ => 4, ….} …. …. } } 有可能让用户按其子哈希的权重键排序吗? 我查看了Hash.sort,但它看起来像是返回数组而不是我原来的哈希排序。

将哈希转换为对象

我试图将哈希和嵌套哈希转换为对象。 到目前为止,第一个哈希对象由此代码成功转换: class Hashit def initialize(hash) hash.each do |k,v| self.instance_variable_set(“@#{k}”, v) self.class.send(:define_method, k, proc{self.instance_variable_get(“@#{k}”)}) self.class.send(:define_method, “#{k}=”, proc{|v| self.instance_variable_set(“@#{k}”, v)}) end end end 但问题是,我还想转换嵌套的哈希对象。 但无法成功。 h = Hashit.new({a: ‘123r’, b: {c: ‘sdvs’}}) => #”sdvs”}> 在输出中看到@b={:c=>”sdvs”}这部分。 我也想将它转换为对象。 有可能,如果是,那么如何?

返回Ruby中带有修改值的哈希值

我正在尝试这个: {:id => 5, :foos => [1,2,3]}.each {|k,v| v.to_s} 但那是回归: {:id=>5, :foos=>[1, 2, 3]} 我想看看这个: {:id=>”5″, :foos=>”[1, 2, 3]”} 我也尝试过Hash#collect和Hash#map变种。 有任何想法吗?