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

4

I have this nested array:

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

有没有一个函数,当我输入"Y"时返回"B",输入"Z"时返回"C"?

2
挑剔的一点是:最好将“and 'C'”改为“and return 'C'”。起初我以为你提供了“Y”和“C”,并想要“B”,这似乎很奇怪,使句子难以理解。当然,可能只有我一个人读成那样。 - Cary Swoveland
4个回答

12

rassoc可能是您所需的。

array.rassoc("Y")将返回["B", "Y"],您可以使用first仅获取"B"


3
您可以使用 find 方法。
array = [
  ["A", "X"],
  ["B", "Y"],
  ["C", "Z"]
]


str = "Y"
arr = array.find{|a| a[1] == str}
puts arr[0] if arr
# => B

2

或者,如果您需要进行多次查找且数组较大,则可以将其转换为哈希表:

hash = array.map(&:reverse).to_h
hash["Y"]
# => "B"

1

目前没有这样的内部函数,但是可以很容易地创建一个:

▶ λ = ->(input) { array.detect { |e| e.last == input }.first rescue nil }
#⇒ #<Proc:0x0000000437f150@(pry):10 (lambda)>
▶ λ.('X')
#⇒ "A"
▶ λ.('Y')
#⇒ "B"
▶ λ.('QQQ')
#⇒ nil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接