我知道应该避免使用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
有更好的方法吗?
答案 0 :(得分:3)
答案 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
的值,然后将它们与唯一值数组进行比较。