Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将一个键数组与一个具有键值对(如excel vlookup)的散列连接_Ruby_Arrays_Hash_Hashmap - Fatal编程技术网

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::Result
Result.map{| hash | hash.first.first}
+1中返回给我的数据结构。我不会说它是神秘的,它准确地描述了它在做什么。如果我没有散列,而是有一个如下的散列数组:[{“ddd”=>4},{“aaa”}=>1…]这个解决方案仍然有效吗?为什么会有这么愚蠢的数据结构?只需将其映射到
数组。这是在Mysql2::Result
Result.map{| hash | hash.first.first}中返回给我的数据结构