如果要查找重复值的语句?

时间:2016-12-06 15:32:49

标签: arrays swift

好吧,假设我有一个随机生成值的列表,有时它会生成两次相同的值。

例如生成的int值:

1, 1, 2, 3, 4

然后我有一个名为duplicateTracker()的方法,它的工作是在列表中查找重复项。

我知道应该使用if else语句来完成它。因此,如果它检测到重复数字,则为true,否则为false。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这使用了Foundation方法,但考虑到您的用例,您可能需要考虑让我们使用NSCountedSet来跟踪您生成的数字。 E.g。

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]

答案 1 :(得分: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