var arrEmails = NSMutableArray()
arrEmails = ["a.a@gmail.com", "a.a1@gmail.com", "a.a@gmail.com", "b.b@gmail.com", "c.c@gmail.com", "a.a1@gmail.com"]
上面是我的数组,我想检查是否有任何重复值。为此我写下面的代码。
let set = NSCountedSet.init(array: arrEmails as! [Any])
var duplicates: Int = 0
for var object in set {
if set.count(for: object) > 1 {
duplicates = duplicates+1
}
}
但是在上面的代码中,如果数组包含如下的值,则返回重复值1。
arrEmails = ["a.a@gmail.com", "", "", "b.b@gmail.com", "", ""]
我不想删除重复值,我只想检查数组中重复值的数量。 怎么检查?请帮帮我。
答案 0 :(得分:1)
您的代码会计算不同重复项的数量。在您的情况下,所有四个重复项彼此相同 - 即空字符串""
。
如果要计算具有重复项的对象总数,请将set.count(for: object)
返回的值相加:
let arrEmails = ["a.a@gmail.com", "", "", "b.b@gmail.com", "", ""]
let set = NSCountedSet.init(array: arrEmails as! [Any])
let totalDups = set.map { set.count(for: $0) }.filter {$0 > 1}.reduce(0, +)
以上代码生成totalDups
的{{1}}。
您计算唯一重复项的代码可以简化为一行,如下所示:
4
答案 1 :(得分:1)
首先停止使用
i = 0 while i < n: j = 0 while j < m: # do something in while loop for j j += 1 # do something in while loop for i i += 1
并使用Swift数组。
所以你有这个数组
NSMutableArray
现在你可以检查是否有重复只是写
let emails = ["a.a@gmail.com", "a.a1@gmail.com", "a.a@gmail.com", "b.b@gmail.com", "c.c@gmail.com", "a.a1@gmail.com"]
注意,这仅在数组的泛型类型为
let hasDuplicates = emails.count != Set(emails).count
时才有效。
答案 2 :(得分:1)
SWIFT 4
肯定有更好的方法可以做到这一点,但我有一个用于解决此类问题的方法
经过测试,您可以将此代码粘贴到游乐场以获得即时结果
// here we can store dulicate elements in array
var storeDuplicateValue = [String:Int]()
let arrEmails = ["a.a@gmail.com", "", "", "b.b@gmail.com", "", "","b.b@gmail.com"]
var count = 0
// here we loop through all elements
for email in arrEmails {
if(email != ""){
count = 0
for newEmail in arrEmails {
if(email == newEmail){
count += 1
}
}
// if count is more than 1 we have duplicate elements
if(count > 1){
// so we store duplicate elements in dictionary and its count to know how many times it has been repeated
storeDuplicateValue.updateValue(count, forKey: email)
}
}
}
print(storeDuplicateValue)
// here we get count of keys in dictionary to know number of duplicate strings
print(storeDuplicateValue.keys.count)
答案 3 :(得分:0)
你的代码很好!而且你得到了正确和预期的结果!
在代码中,重复的值是“”。
为了便于理解,您可以更改值数组,然后重试。
答案 4 :(得分:0)
正如大多数其他答案所述,您的代码很好。如果唯一的问题是应该忽略空字符串,可以在计算重复项之前从数组中过滤掉它们:
let emails = ["a.a@gmail.com", "", "", "b.b@gmail.com", "", ""]
let emailsWithoutEmptyStrings = emails.filter { $0 != "" }
let set = NSCountedSet(array: emailsWithoutEmptyStrings)
var duplicates = 0
for object in set {
if set.count(for: object) > 1 {
duplicates += 1
}
}