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中搜索子字符串和返回键的哈希值_Ruby_Arrays_Hash - Fatal编程技术网

在Ruby中搜索子字符串和返回键的哈希值

在Ruby中搜索子字符串和返回键的哈希值,ruby,arrays,hash,Ruby,Arrays,Hash,我有一个数组: array=[“一个够了”,“两个是一对”,“牛肉在哪里?”,“一”] 然后我有一个散列: hash = {"one" => "Defined", "two" => "Test" } 我需要在数组中的每个对象上循环,并查看该对象是否包含在散列键中找到的子字符串。如果找到它,它应该返回散列值。否则,它应该返回未定义的。最终目标是创建一个如下所示的数组: final_array=[“已定义”、“测试”、“未定义”、“已定义”] 如何有效地编

我有一个数组:

array=[“一个够了”,“两个是一对”,“牛肉在哪里?”,“一”]

然后我有一个散列:

hash = {"one" => "Defined",
        "two" => "Test"
       }
我需要在
数组
中的每个对象上循环,并查看该对象是否包含在
散列
键中找到的子字符串。如果找到它,它应该返回
散列
值。否则,它应该返回
未定义的
。最终目标是创建一个如下所示的数组:

final_array=[“已定义”、“测试”、“未定义”、“已定义”]

如何有效地编写该循环?

以下是一种方法:

array = ["One is enough", "Two is a couple", "Where's the beef?", "One"]
hash = {"one" => "Defined","two" => "Test"}

array.map{|e| hash.find(proc{["undefined"]}){|k,v| e.downcase.include? k}.last}
# => ["Defined", "Test", "undefined", "Defined"]
说明:

是个好主意。正如doc所说-将枚举中的每个条目传递给块。返回块不为false的第一个条目。如果没有对象匹配,则调用ifnone并在指定时返回其结果,否则返回nil。

我使用了
Array#map
,并将每个元素字符串传递给块。现在在块内我调用了
#find
on
hash
。现在
hash。find
将每个
键/值
对传递给
哈希。find
方法块。在该块内我调用
string.\include>方法on
e
,pa使用key作为
#include?
方法的参数。如果
#include?
测试结果
true
,则返回该迭代的
key/value
,否则将执行默认参数
proc{[“undefined”]}。调用

希望有帮助

hash = {"one" => "Defined", "two" => "Test"}
array = ["One is enough", "Two is a couple", "Where's the beef?", "One"]

hash.default = "Undefined"
keys = hash.keys
array.map {|a| hash[(a.split.map(&:downcase) & keys).first]}
  • 如果哈希不包含键“k”,则哈希[k]=>“未定义”
  • a、 split.map(&:downcase)更改,例如,a=“一个足够”到“一个足够”
  • 与关键点的交点分别等于[“一”]、[“两”]、[nil]、“一”]
  • 。首先是从1元素数组中提取哈希键
  • 在计算的哈希键处计算哈希值,哈希值[nil]=>“未定义”(默认值)

非常有效-您有没有可能解释一下这种方法的原理?我必须更好地使用和理解这些一行程序。