好吧,假设我有一个随机生成值的列表,有时它会生成两次相同的值。
例如生成的int值:
1, 1, 2, 3, 4
然后我有一个名为duplicateTracker()的方法,它的工作是在列表中查找重复项。
我知道应该使用if else语句来完成它。因此,如果它检测到重复数字,则为true,否则为false。
我该怎么做?
答案 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