返回数组中的重复元素

时间:2015-08-31 06:47:41

标签: arrays swift

我试图在一个新数组中获取给定数组的重复元素,但我怎么也不知道我在哪里被困,为什么它不起作用。

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]))

2 个答案:

答案 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。