2016-12-06 24 views
0

私は値をランダムに生成するリストを持ち、同じ値を2回生成することもあります。その後、私はduplicateTracker(というメソッドを持っている重複する値を見つけるためのif文?

1, 1, 2, 3, 4 

)とその仕事は、リスト内の重複を見つけることです。例えば

は、int型の値を生成しました。

if else文を使用して行う必要があるという考えがあります。したがって、重複する数値が検出された場合はtrue、そうでない場合はfalseです。

どうすればよいですか?

+1

あなたが項目の*小さな、固定*数あれば見つけるために、 'if'ステートメントを使用することができます重複が含まれています。コンパイル時に項目の数が固定されていない場合や、大きければ(実際には3〜4が実用的な最大値)、これまで見たことのあるループとコンテナ、またはネストされたループ。 – dasblinkenlight

+2

'set(numbers).count dfri

+1

最も簡単な方法は、おそらく要素を1つずつセットに追加して、それがすでにセットに入っているかどうかをチェックすることです。そうであれば、それは重複している、そうでなければ新しいものです。 – Carcigenicate

答えて

1

これはFoundationメソッドを使用していますが、ユースケースを考慮して、NSCountedSetを生成した番号を追跡することを検討することをお勧めします。例えば。

let numbersGenerator = AnyIterator { return 1 + arc4random_uniform(10) } 
var numbersBag = NSCountedSet() 

for num in (0...15).flatMap({ _ in numbersGenerator.next()}) { 
    print(num, terminator: " ") 
    numbersBag.add(num) 
} /* 1 3 2 2 10 1 10 7 10 6 8 3 8 10 7 4 */ 
print() 

numbersBag.forEach { print($0, numbersBag.count(for: $0)) } 
/* 1 2 
    2 2 
    3 2 
    4 1 
    6 1 
    7 2 
    8 2 
    10 4 */ 

NSCountedSetSequenceに準拠しているので、あなたは簡単にあなたが例えば使用したい任意の「重複診断」を抽出することができますfilter:この機能を考えると

print("Numbers with duplicates: ", numbersBag.filter { numbersBag.count(for: $0) > 1 }) 
// Numbers with duplicates: [1, 2, 3, 7, 8, 10] 
0

func checkForDups(_ arr1:[Int], _ arr2:[Int]) -> Bool { 
    let arrChecked = Set(arr1).subtracting(Set(arr2)) 
    if Set(arr1).count != arrChecked.count { 
     return true 
    } 
    return false 
} 

ここで動作するコードです:

let arr1:[Int] = [1,1,2,3,4,5] 
let arr2:[Int] = [1,10,20] 
let arr3:[Int] = [10,20,30] 
print(checkForDups(arr1, arr2)) // prints true 
print(checkForDups(arr1, arr3)) // prints false 
関連する問題