在找到匹配元素之前,如何遍历哈希?

时间:2017-10-10 16:46:00

标签: ruby hash detect

我有一个将整数映射到数组的哈希。例如

{1 => ["abc"], 2 => ["ccc", "ddd"]}

我如何遍历哈希值,直到找到一个值只有数组大小为1的条目?通常我可以做

arr.detect{|element| element.size == 1}

但这只适用于数组。我不确定如何将类似的逻辑应用于哈希。

1 个答案:

答案 0 :(得分:2)

同样的原则适用:

h = {1 => ["abc"], 2 => ["ccc", "ddd"]}

h.find do |_, l|
  l.size == 1
end
# => [ 1, ["abc"]]

现在,如果你正在寻找一个更有用的变量集:

key, value = h.find do |_, l|
  l.size == 1
end
# => [ 1, ["abc"]]
key
# => 1
value
# => ["abc"]

如果你只关心价值观,那就更容易了:

list = h.values.find do |l|
  l.size == 1
end