比较数组中多个哈希值

时间:2013-06-01 01:28:10

标签: ruby arrays for-loop hash

我知道应该避免使用for循环,我想迭代数组的更好方法不是做

for i in 0..array.size-1 do
  puts array[i]
end

DO

array.each{ |x| 
  puts x
}

但是,如果我有一系列哈希,如

array = [{:value0 => 1, :value1 => 0}, {:value0 => 2, :value1 => 1}, {:value0 => 1, :value1 => 2}]

并想检查:value0在所有哈希值中是否唯一...直觉上我会做类似

的事情
for i in 0..array.size-1 do
  _value_buffer = array[i][:value0]
  for j in i+1..array.size-1 do
    if _value_buffer == array[j][:value0]
      puts "whatever"
    end
  end
end

有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

为什么不直接获取所有值,看看它们是否独一无二?

!array.map { |h| h[:value0] }.uniq!

uniq!在没有重复的情况下返回nil

答案 1 :(得分:2)

正如安德鲁·马歇尔所说,你可以使用uniq!,但采用更简洁的方式:

!array.uniq!{|a| a[:value0]}

答案 2 :(得分:1)

我将如何做到这一点:

2.0.0p195 :001 > array = [{:value0 => 1, :value2 => 0}, {:value0 => 2, :value2 => 1}, {:value0 => 1, :value2 => 2}]
 => [{:value0=>1, :value2=>0}, {:value0=>2, :value2=>1}, {:value0=>1, :value2=>2}] 
2.0.0p195 :002 > val0 = array.map { |hash| hash[:value0] }
 => [1, 2, 1] 
2.0.0p195 :003 > puts val0.uniq == val0
false
 => nil

我会收集:value0的值,然后将它们与唯一值数组进行比较。