2016-12-06 65 views
0

好吧,讓我說我有一個列表隨機生成值,有時它會產生兩次相同的值。如果語句找到重複值?

例如產生int值:

1, 1, 2, 3, 4 

然後我有一個名爲duplicateTracker方法()和它的任務是找到列表內重複。

我有一個想法,它應該使用if else語句完成。所以,如果它檢測到重複的數字,那麼它是真的,否則爲false

我該怎麼做?

+1

你可以用'if'聲明找到,如果一個*小,固定*項目數包含重複項。如果項目的數量在編譯時沒有固定,或者在項目數量很大時(三個或四個爲實際最大值),則需要使用目前爲止所見到的循環和容器,或者一對嵌套循環。 – dasblinkenlight

+2

'如果設置(數字).count dfri

+1

最簡單的方法可能是將元素逐個添加到集合中,並檢查它是否已經在集合中。如果是,它是重複的,否則它是新的。 – Carcigenicate

回答

1

這使用基礎方法,但考慮到您的使用情況,您可能需要考慮讓我們使用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 */ 

由於NSCountedSet符合Sequence,你可以很容易地提取你希望使用任何例如「重複診斷」 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