1

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

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

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

有一个更好的方法吗?

4

3 回答 3

3

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

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

(没有重复时uniq!返回)nil

于 2013-06-01T01:32:43.413 回答
2

正如 Andrew Marshall 所说,您可以使用 uniq!,但使用更简洁的方式:

!array.uniq!{|a| a[:value0]}
于 2013-06-01T02:41:45.483 回答
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然后将它们与唯一值数组进行比较。

于 2013-06-01T01:32:30.440 回答