能否从包含nil值的数组中删除重复值?

5

数组可以是任何类型,如

let myArray1 = [ 1, 2, 3, 1, 2, 1, 3, nil, 1, nil]

let myArray2 = [ 1, 2.0, 1, 3, 1.0, nil]

从数组中删除重复值后,新数组应该是: 输出 -
 [ 1, 2, 3, nil ]

1
请移步以下链接查看与此相关的问题:https://dev59.com/Q18e5IYBdhLWcg3wdqGT - Sharad Chauhan
1
我也尝试了这个链接:https://dev59.com/Q18e5IYBdhLWcg3wdqGT - Pratik Panchal
在我的数组中,我也有空值。 - Pratik Panchal
您想保留数组的初始排序吗? - Dávid Pásztor
是的,我也管理订单。 - Pratik Panchal
显示剩余3条评论
3个回答

3

@Daniel的一般解决方案:

func uniqueElements<T: Equatable>(of array: [T?]) -> [T?] {
    return array.reduce([T?]()) { (result, item) -> [T?] in
        if result.contains(where: {$0 == item}) {
            return result
        }
        return result + [item]
    }
}

let array = [1,2,3,1,2,1,3,nil,1,nil]

let r = uniqueElements(of: array) // [1,2,3,nil]

使用序列的扩展是否可以实现交替? - Pratik Panchal
我很想亲自看看,到目前为止我还没有找到表达这个的方法。 - Gereon

2
您可以使用reduce函数来删除重复项:
myArray.reduce([Int?]()) { (result, item) -> [Int?] in
    if result.contains(where: {$0 == item}) {
        return result
    }
    return result + [item]
}

输出:[1,2,3,nil]


类型未指定,可以是动态的,如int、double或字符串数组。 - Pratik Panchal
数组可以是任何类型,例如:1)let myArray1 = [1,2,3,1,2,1,3,nil,1,nil]或者2)let myArray2 = [1,2.0,1,3,1.0,nil] - Pratik Panchal

2
请检查这段代码,我使用了NSArray,在获取筛选后的数组之后,您可以将其转换为Swift数组。
    let arr = [1, 1, 1, 2, 2, 3, 4, 5, 6, nil, nil, 8]

    let filterSet = NSSet(array: arr as NSArray as! [NSObject])
    let filterArray = filterSet.allObjects as NSArray  //NSArray
    print("Filter Array:\(filterArray)")

这不会保留元素的顺序。 - Gereon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接