如何在Ruby中搜索嵌套数组?

时间:2016-07-25 08:29:43

标签: arrays ruby

我有这个嵌套数组:

array = [
      ["A", "X"],
      ["B", "Y"],
      ["C", "Z"]
]

是否有一个函数返回" B"当我提供" Y"和" C"当我提供" Z"?

4 个答案:

答案 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