У меня есть два массива, для которых я сравниваю [Int]Как удалить одно повторяющееся значение в массиве?
let filter = strongAgainstArray.filter{weakAgainstArray.contains($0)}
Это возвращает массив общих значений в 2-х массивах. Затем я хочу, чтобы пройти и удалить эти значения из каждого массива, который я делаю вот так
for item in filter {
for var i = 0; i < strongAgainstArray.count; i += 1 {
if item == strongAgainstArray[i] {
strongAgainstArray.removeAtIndex(i)
print("Removing a Strong against index \(item)")
}
}
for var i = 0; i < weakAgainstArray.count; i += 1 {
if item == weakAgainstArray[i] {
weakAgainstArray.removeAtIndex(i)
print("Removing a Weak against index \(item)")
}
}
}
Это прекрасно работает, но, скажем, один из моих массивов содержит две записи для 12
в качестве примера. Как удалить только один из них? В этом случае все записи 12
полностью удаляются.
EDIT
Я теперь сравнивая моих двух массивов с использованием
let commonValues = Array(Set(strongAgainstArray).intersect(weakAgainstArray))
, а затем те commonValues
из каждого массива с
cleanStrongAgainstArray = Array(Set(strongAgainstArray).subtract(Set(commonValues)).sort())
cleanWeakAgainstArray = Array(Set(weakAgainstArray).subtract(Set(commonValues)).sort())
Это гораздо лучше общее решение, но я все еще в конечном итоге столкнулся с той же проблемой, хотя и немного отличающейся от предыдущей.
В детской площадке, к примеру ...
let array = [7,7,9]
let test = Array(Set(array))
тест возвращается содержащий [7, 9]
, и мне нужно, чтобы сохранить дополнительный 7. Как я могу это сделать?
Если значения в массивах уникальны в пределах themse вы должны подумать об использовании наборов, поскольку они построили методы для этих видов операций. Как показано здесь: http://stackoverflow.com/questions/24589181/set-operations-union-intersection-on-swift-array – Ike10
Вам нужно сохранить порядок массива? – Paulw11
Также одно замечание: структурирование цикла таким образом может вызвать проблемы, так как вы изменяете длину массива при прохождении через него. –