extension Array where Element: Equatable {
func subtracting(_ array: Array<Element>) -> Array<Element> {
var result: Array<Element> = []
var toSub = array
for i in self {
if let index = toSub.firstIndex(of: i) {
toSub.remove(at: index)
continue
}
else {
result.append(i)
}
}
return result
}
}
let first = [1, 1, 2, 3, 3, 5, 6, 7, 7]
let second = [2, 2, 3, 4, 4, 5, 5, 6]
let result = first.subtracting(second)
//print result
//[1, 1, 3, 7, 7]
9条答案
按热度按时间ftf50wuq1#
@Antonio's solution的性能更高,但如果需要的话,它会保留顺序:
xdnvmnnf2#
最简单的方法是将两个数组都转换为集合,从第一个数组中减去第二个数组,将结果转换为一个数组,然后将其赋回
array1
:请注意,您的代码不是有效的Swift -您可以使用类型推断来声明和初始化两个数组,如下所示:
ovfsdjhp3#
使用索引数组删除元素:
1.字符串和索引数组
1.整数和索引数组
使用另一个数组的元素值删除元素
1.整数数组
1.字符串数组
iszxjhcz4#
下面是一个带有@jrc的扩展名:
z0qdvdin5#
超出范围,但如果它在这里,会对我有帮助。正在从OBJECTIVE-C中的数组中删除subArray
希望它能帮助到别人:)
lmvvr0a86#
您可以创建集合,然后使用减法
lyfkaqu17#
Shai Balassiano的回答的延伸版本:
bejyjqdl8#
这里还有一个解决方案,就是定义自己的PredicateSet。
2jcobegt9#
如果有2个数组包含重复的元素,你只需要一个简单的减法,你可以使用这段代码。这也适用于
String
类型。