我正在尝试从数组中删除类型[(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) }
}
这似乎有效,但我想知道它是否会影响大量数据的性能。有一个更好的方法吗?或者我所做的是正确的?
答案 0 :(得分:2)
您可以使用符合Hashable协议的结构替换元组。
struct Button: Hashable {
...
}
然后,如果您有此结构的实例数组,则可以使用“集”来过滤重复项并从另一项中减去一个集。集合是无序唯一元素的集合。
/// 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))
}