doc*_*nge 227 ruby arrays hash search
我有一系列哈希,@ fathers.
a_father = { "father" => "Bob", "age" => 40 }
@fathers << a_father
a_father = { "father" => "David", "age" => 32 }
@fathers << a_father
a_father = { "father" => "Batman", "age" => 50 }
@fathers << a_father
Run Code Online (Sandbox Code Playgroud)
如何搜索此数组并返回一个块返回true的哈希数组?
例如:
@fathers.some_method("age" > 35) #=> array containing the hashes of bob and batman
Run Code Online (Sandbox Code Playgroud)
谢谢.
Jor*_*ing 401
您正在寻找Enumerable #select(也称为find_all
):
@fathers.select {|father| father["age"] > 35 }
# => [ { "age" => 40, "father" => "Bob" },
# { "age" => 50, "father" => "Batman" } ]
Run Code Online (Sandbox Code Playgroud)
根据文档,它"返回一个数组,其中包含[可枚举的所有元素@fathers
] ,在这种情况下,哪个块不是false."
Nav*_*eed 191
这将返回第一场比赛
@fathers.detect {|f| f["age"] > 35 }
Run Code Online (Sandbox Code Playgroud)
Hit*_*aut 32
如果您的阵列看起来像
array = [
{:name => "Hitesh" , :age => 27 , :place => "xyz"} ,
{:name => "John" , :age => 26 , :place => "xtz"} ,
{:name => "Anil" , :age => 26 , :place => "xsz"}
]
Run Code Online (Sandbox Code Playgroud)
并且您想知道您的阵列中是否已存在某些值.使用查找方法
array.find {|x| x[:name] == "Hitesh"}
Run Code Online (Sandbox Code Playgroud)
如果Hitesh出现在名称中,则返回对象,否则返回nil
(添加到以前的答案(希望对某人有帮助):)
年龄更简单,但在字符串的情况下并忽略大小写:
@fathers.any? { |father| father[:name].casecmp("john") == 0 }
应该适用于 start 中或字符串中任何位置的任何情况,即 for "John"
、"john"
or"JoHn"
等等。
@fathers.find { |father| father[:name].casecmp("john") == 0 }
@fathers.select { |father| father[:name].casecmp("john") == 0 }