我有这个嵌套数组:
array = [
["A", "X"],
["B", "Y"],
["C", "Z"]
]
是否有一个函数返回" B"当我提供" Y"和" C"当我提供" Z"?
答案 0 :(得分:7)
rassoc可能就是您所需要的。
array.rassoc("Y")
会返回["B", "Y"]
,您可以使用first
仅获取"B"
。
答案 1 :(得分:2)
您可以使用find
方法。
array = [
["A", "X"],
["B", "Y"],
["C", "Z"]
]
str = "Y"
arr = array.find{|a| a[1] == str}
puts arr[0] if arr
# => B
答案 2 :(得分:2)
或者,你可以将它转换为Hash,如果你需要做很多查找并且数组很大:
hash = array.map(&:reverse).to_h
hash["Y"]
# => "B"
答案 3 :(得分:1)
没有开箱即用的内部功能,但可以轻松创建一个:
▶ λ = ->(input) { array.detect { |e| e.last == input }.first rescue nil }
#⇒ #<Proc:0x0000000437f150@(pry):10 (lambda)>
▶ λ.('X')
#⇒ "A"
▶ λ.('Y')
#⇒ "B"
▶ λ.('QQQ')
#⇒ nil