Ruby 将一个键数组与一个具有键值对(如excel vlookup)的散列连接
我有一个未排序的密钥数组,如下所示:Ruby 将一个键数组与一个具有键值对(如excel vlookup)的散列连接,ruby,arrays,hash,hashmap,Ruby,Arrays,Hash,Hashmap,我有一个未排序的密钥数组,如下所示: keys = ["ccc", "ddd", "ggg", "aaa", "bbb"] 还有一份杂烩 hash = {"ddd" => 4, "aaa" => 1, "bbb" => 2, "eee" => 5, "fff" => 6} 我想将这两个数据结构合并起来,以按原始键顺序将哈希返回到第一个键: {"ccc" => nil, "ddd" => 4, "ggg" => nil, "aaa" =>
keys = ["ccc", "ddd", "ggg", "aaa", "bbb"]
还有一份杂烩
hash = {"ddd" => 4, "aaa" => 1, "bbb" => 2, "eee" => 5, "fff" => 6}
我想将这两个数据结构合并起来,以按原始键顺序将哈希返回到第一个键:
{"ccc" => nil, "ddd" => 4, "ggg" => nil, "aaa" => 1, "bbb" => 2}
不在散列中的项(如“ggg”)应返回nil。
这类似于excel中的“v查找”函数。
这是红宝石的。谢谢 神秘的:
Hash[keys.zip(hash.values_at *keys)]
或者更长一点,不那么神秘:
keys.map.with_object({}) {|key, memo| memo[key] = hash[key]}
神秘的:
Hash[keys.zip(hash.values_at *keys)]
或者更长一点,不那么神秘:
keys.map.with_object({}) {|key, memo| memo[key] = hash[key]}
在您期望的哈希中,为什么“ccc”是3而不是零?为什么“ddd”是4而不是3?因为我写的这个问题没有足够的咖啡因。现在应该更正。在您预期的哈希中,为什么“ccc”是3而不是零?为什么“ddd”是4而不是3?因为我写的这个问题没有足够的咖啡因。现在应该更正。功能解决方案+1。我不会说它是神秘的,它准确地描述了它在做什么。如果我没有散列,而是有一个如下的散列数组:[{“ddd”=>4},{“aaa”}=>1…]这个解决方案仍然有效吗?为什么会有这么愚蠢的数据结构?只需将其映射到
键
数组。这是在函数解决方案的Mysql2::ResultResult.map{| hash | hash.first.first}
+1中返回给我的数据结构。我不会说它是神秘的,它准确地描述了它在做什么。如果我没有散列,而是有一个如下的散列数组:[{“ddd”=>4},{“aaa”}=>1…]这个解决方案仍然有效吗?为什么会有这么愚蠢的数据结构?只需将其映射到键
数组。这是在Mysql2::ResultResult.map{| hash | hash.first.first}中返回给我的数据结构