【问题标题】:Filtering duplicates in array and deleting array elements from another array in swift 2.0在 swift 2.0 中过滤数组中的重复项并从另一个数组中删除数组元素
【发布时间】:2015-11-26 10:12:36
【问题描述】:

我正在尝试从数组中删除类型为 [(Int,Int)] 的重复元素,然后我正在尝试从父数组中删除相同类型的元素数组。我就是这样做的。

func filterDuplicatesFrom(var buttonArray:[(Int,Int)]) ->[(Int,Int)]
    {
        var i: Int = 0, j:Int = 0
        var elementToDelete:[Int] = []
        for (i=0; i<buttonArray.count-1; i++)
        {
            for (j=i+1; j<buttonArray.count; j++)
            {
                if buttonArray[j].0 == buttonArray[i].0 &&  buttonArray[j].1 == buttonArray[i].1
                {
                    if elementToDelete.contains(j)
                    {
                        elementToDelete.append(j)
                    }
                }
            }
        }

        buttonArray.removeAtIndices(elementToDelete)
    }

func deletePoints(var deleteList:[(Int,Int)],var buttonArray:[(Int,Int)]) ->[(Int,Int)]
{

    var i: Int = 0, j:Int = 0
    var elementToDelete:[Int] = []
    for (i=0; i<buttonArray.count; i++)
    {
        for (j=0; j<deleteList.count; j++)
        {
            if deleteList[j].0 == buttonArray[i].0 &&  deleteList[j].1 == buttonArray[i].1
            {
                if elementToDelete.contains(i)
                {
                    elementToDelete.append(i)
                }
            }
        }
    }

    buttonArray.removeAtIndices(elementToDelete)
}

extension Array {
    mutating func removeAtIndices(incs: [Int]) {
        incs.sort(>).map { removeAtIndex($0) }
    }

这似乎可行,但我想知道它是否会影响大量数据的性能。有一个更好的方法吗?或者我所做的是正确的?

【问题讨论】:

    标签: ios arrays swift swift2 xcode7


    【解决方案1】:

    您可以将元组替换为符合 Hashable 协议的结构。

    struct Button: Hashable {
        ...
    }
    

    然后,如果您有此结构的实例数组,则可以使用 Sets 过滤重复项并从另一个集合中减去一个集合。集合是无序独特元素的集合。

    /// remove duplicates (create a set)
    
    func filterDuplicatesFrom(buttonArray:[Button]) -> Set<Button> {
        return Set(buttonArray)
    }
    
    /// delete
    
    func deletePoints(deleteList:[Button], buttonArray:[Button]) -> Set<Button> {
        return Set(buttonArray).subtract(Set(deleteList))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多