您显然必须对数组的元素至少迭代一次。
如果你经常这样做,你应该使用另一种数据格式:
array1 = [
{ ID: '1', value: 'abc' },
{ ID: '2', value: 'def' },
{ ID: '3', value: 'abc' }
]
lookup_table = array1.each_with_object(Hash.new { |h, k| h[k] = [] }) do |hash, table|
table[hash[:value]] << hash[:ID]
end
p lookup_table
# {"abc"=>["1", "3"], "def"=>["2"]}
p lookup_table['abc']
# ["1", "3"]
作为奖励,它会为您提供ID
找到该值的所有 s,并且它会快速提供。
如果您只想知道哈希值是否存在,您可以使用Set
:
require 'set'
all_values = Set.new(array1.map{|h| h[:value]})
p all_values.include? 'abc'
# true
p all_values.include? 'xyz'
# false
同样,查找将比使用哈希数组快得多。