我试图在一个新数组中获取给定数组的重复元素,但我怎么也不知道我在哪里被困,为什么它不起作用。
var arraye: [Int] = []
func fn(list: [Int]) -> [Int] {
for var a = 0; a < list.count; a++ {
for var b = 1; b < list.count; b++ {
if list[a] == list[b] {
if contains(arraye, list[a]) == false {
arraye.append(list[b])
}
}
}
}
return arraye
}
println(fn([1,2,4,3]))
答案 0 :(得分:0)
你的算法有错误:
你必须在&#34;原创&#34;之后开始搜索重复的 。元件。因此,您必须将b
初始化为a + 1
。
func fn(list: [Int]) -> [Int] {
for var a = 0; a < list.count; a++ {
for var b = a + 1; b < list.count; b++ {
if list[a] == list[b] && !contains(arraye, list[a]) {
arraye.append(list[b])
}
}
}
return arraye
}
println(fn([1, 2, 4, 3, 4, 1, 4]))
打印
[1, 4]
顺便说一句:
行if list[a] == list[b] {
和if contains(arraye, list[a]) == false
可以统一,contains(arraye, list[a]) == false
通常写为!contains(arraye, list[a])
。
答案 1 :(得分:0)
只是添加一些信息:还有NSCountedSet
的另一种方法。我相信它比使用多次调用contains
更轻量级。
func fn(list: [Int]) -> [Int] {
let uniques = NSCountedSet()
uniques.addObjectsFromArray(list)
var result = [AnyObject]()
for item in uniques {
if uniques.countForObject(item) > 1 {
result.append(item)
}
}
return result as! [Int]
}
println(fn([1, 2, 4, 3, 4, 1, 4])) // prints [1, 4]
当然不是&#34;纯粹&#34; Swift不再,因为NSCountedSet
来自Foundation。