Arrays 从swift中的单个数组中获取重复值

Arrays 从swift中的单个数组中获取重复值,arrays,swift,Arrays,Swift,我是iOS新手,正在尝试一些东西,你们能帮帮我吗。谢谢你的帮助 let values = ["sid","sid","tarun","nitesh"] 输出必须是: ["sid","sid"] 检查数组中每个元素的计数,如果计数大于1,则在结果数组中追加 let values = ["sid","sid","tarun","nitesh","nitesh"] var result = [String]() values.forEach { value in if values.fil

我是iOS新手,正在尝试一些东西,你们能帮帮我吗。谢谢你的帮助

let values = ["sid","sid","tarun","nitesh"]
输出必须是:

["sid","sid"]

检查数组中每个元素的计数,如果计数大于1,则在结果数组中追加

let values = ["sid","sid","tarun","nitesh","nitesh"]
var result = [String]()
values.forEach { value in
    if values.filter({ $0 == value }).count > 1 {
        result.append(value)
    }
}
print(result)//["sid", "sid", "nitesh", "nitesh"]


一个有效的解决方案是首先创建“字数”或“直方图”。遍历数组一次,并为每个值更新字典:

let values = ["sid", "sid", "tarun", "nitesh"]

let wordcount = values.reduce(into: [:]) { (dict, value) in
    dict[value, default: 0] += 1
}
在您的示例中,这将是字典
[“nitesh”:1,“sid”:2,“tarun”:1]

然后使用该字典过滤数组,只保留字数大于1的条目。这需要对数组进行另一次遍历:

let duplicates = values.filter { wordcount[$0, default: 0] > 1 }
print(duplicates) // ["sid", "sid"]

总的复杂度与数组元素的数量成线性关系。

到目前为止,您尝试了什么?您所采取的方法中有哪些不起作用?您肯定尝试了一些东西。不要犹豫,展示你的尝试,这样它就不会像一个“为我写代码”的问题!我尝试使用filter和contains,但没有得到我需要的输出当数组中有多个单词重复时,您期望的输出是什么?为什么需要这样的输出?你打算用它做什么?当有三个或三个以上的“sid”时会发生什么情况?更通用的方式
func findDuplicate(myArray:Array)->myArray中的项的数组{var result=Array(){if myArray.filter({$0==item}).count>1{result.append(item)}返回结果}
let duplicates = values.filter { wordcount[$0, default: 0] > 1 }
print(duplicates) // ["sid", "sid"]