2016-10-07 14 views
1

私はこのメソッドの周りに私の頭を包んでいるように見えることはできません。このコードを理解しようとすると、アイテムが繰り返し処理され、2回インデックスされるので、配列の2回の繰り返しがあると言います。両方のインデックスのコレクションが同じ場合、両方のアイテムのコレクションが同じ場合はtrueを返します。私はこの "重複"を理解したいですか?メソッド

def duplicates?(array1) 
    array1.each_with_index do |item1, index1| 
    array1.each_with_index do |item2, index2| 
     next if index1 == index2 
     return true if item1 == item2 
    end 
    end 
    false 
end 

明らかに私は間違っています。そうでなければ、メソッドは常にtrueを返します。どのように私は間違っていますか?

+0

ルビーについては何も考えていませんが、私はそのアイデアは次のようだと思います。各要素について、等しいかどうかをお互いにチェックしてください。 1つがある場合:Trueを返します。重複がある(つまり、停止アルゴリズム、つまりバイナリチェックであり、関数名の?が認識できる)ことを意味します。その他:続行します。すべてのチェックが成功した場合は、false = no dupesを返します。 – sascha

答えて

1

アルゴリズムは本当に

for each element in array 
    for each element in array 
    skip if indices match 
    return true if elements are the same 

return false 

非常に単純です。

+0

ああ、次にindex == index2の場合、インデックスが一致する場合は一致する要素をスキップし、配列内の項目のいずれかが一致する場合はtrueを返します。今は完璧な意味合いがあります。ありがとうございました。 –

関連する問題