Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 删除多个arraylist swift中的重复项 扩展数组,其中元素:可哈希{ func removeDups()->[元素]{ var uniquedElements=Set() 返回筛选器{uniquedElements.insert($0.inserted} } }_Arrays_Swift - Fatal编程技术网

Arrays 删除多个arraylist swift中的重复项 扩展数组,其中元素:可哈希{ func removeDups()->[元素]{ var uniquedElements=Set() 返回筛选器{uniquedElements.insert($0.inserted} } }

Arrays 删除多个arraylist swift中的重复项 扩展数组,其中元素:可哈希{ func removeDups()->[元素]{ var uniquedElements=Set() 返回筛选器{uniquedElements.insert($0.inserted} } },arrays,swift,Arrays,Swift,我想要这种类型的输出-[AP,84135,AS,84135,BR,84135]由于您有3个不同的数组,您需要首先将它们组合起来,使用zip(::)和map(:)获得数组,即 extension Array where Element : Hashable { func removeDups() -> [Element] { var uniquedElements = Set<Element>() return filter { uniqu

我想要这种类型的输出-[AP,84135,AS,84135,BR,84135]

由于您有3个不同的
数组
,您需要首先将它们组合起来,使用
zip(::)
map(:)
获得
数组
,即

extension Array where Element : Hashable {
    func removeDups() -> [Element] {
        var uniquedElements = Set<Element>()
        return filter { uniquedElements.insert($0).inserted }
    }
}
   
var arr = zip(brachNames, zip(overAllTaget, overAllSold)).map { [$0.0, $0.1.0, $0.1.1] }
现在,使用
Set
过滤掉重复项。然后使用
flatMap(:)
获得单个
结果
数组
,即

extension Array where Element : Hashable {
    func removeDups() -> [Element] {
        var uniquedElements = Set<Element>()
        return filter { uniquedElements.insert($0).inserted }
    }
}
   
var arr = zip(brachNames, zip(overAllTaget, overAllSold)).map { [$0.0, $0.1.0, $0.1.1] }

注意:
集合
是无序的。因此,
结果的顺序可能会改变。

另一种方法是使用所需字段(brachName、overallTarget、OverallSeld)创建一个结构,遵守
Hashable
,并应用如下内容:


这样,如果这很重要的话,您可以保持顺序。

最好使用自定义类型的数组,而不是3个不同的数据数组,这样代码更清晰,并且在访问数据时避免简单的错误。下面是使用
struct
保存数据的此类解决方案的示例

let result = Array(Set(arr)).flatMap{ $0 } //["AP", "84", "135", "AS", "84", "135", "BR", "84", "135"]
还是更直接的方法

extension BranchData {
    var propertyArray: [String] {
        [branchName, String(overallTarget), String(overallSold)]
    }
}

let output = set.flatMap { $0.propertyArray }

我没有命令。另外,为什么你有3个数组,而它似乎是链接数据(AP使用84和135)?太好了。如果有帮助,一定要接受(在左边打勾)。快乐编码
let output = set.flatMap { [$0.branchName, $0.overallTarget, $0.overallSold] }