Czy nie ma łatwego sposobu usunięcia określonego elementu z tablicy, jeśli jest on równy podanemu łańcuchowi znaków? Rozwiązaniem problemu jest znalezienie indeksu elementu tablicy, który chcesz usunąć, a następnie utworzenie nowej tablicy, w której dodaje się wszystkie elementy, które nie są równe podanemu łańcuchowi. Ale czy nie ma szybszej drogi?Usunięcie określonego elementu tablicy, równego ciągowi - Swift
Odpowiedz
Można użyć filtra(), aby filtrować tablicę jak postępować
var myArrayOfStrings = ["Hello","Playground","World"]
myArrayOfStrings = myArrayOfStrings.filter{$0 != "Hello"}
print(myArrayOfStrings) // "[Playground, World]"
Nie jest jasne, czy masz na myśli przez szybsze pod względem czasu lub ilości kodu wykonań.
W tym ostatnim przypadku można z łatwością utworzyć kopię, korzystając z metody filter
. Na przykład, biorąc pod uwagę następującą tablicę:
let array = ["1", "2", "3", "4", "5"]
można utworzyć kopię wszystkich elementów, ale „2” jako:
let filteredArray = array.filter { $0 != "2" }
Hahaha jesteśmy w doskonałej synchronizacji, ale byłem o 7 sekund szybszy. :) –
@LeonardoSavioDabus: Haha, tak, ale przerwała mi moja żona, zadając mi pytanie podczas pisania odpowiedzi ... więc wygrałem ;-) – Antonio
kkkkkk Wiem dokładnie, co masz na myśli :) –
Będziemy chcieli wykorzystać filter()
. Jeśli masz jeden element (o nazwie obj
) do usunięcia, wówczas predykat filter()
będzie { $0 != obj }
. Jeśli robisz to wielokrotnie dla dużej tablicy, może to być problem z wydajnością. Jeśli można odroczyć usuwając poszczególne obiekty i usunąć cały sub-tablicę następnie użyć czegoś takiego:
var stringsToRemove : [String] = ...
var strings : [String] = ...
strings.filter { !contains(stringsToRemove, $0) }
na przykład:
1> ["a", "b", "c", "d"].filter { !contains(["b", "c"], $0) }
$R5: [String] = 2 values {
[0] = "a"
[1] = "d"
}
Można użyć filtra() w połączeniu z przeciążeniem operatora do wytworzenia łatwo powtarzalne rozwiązanie:
func -= (inout left: [String], right: String){
left = left.filter{$0 != right}
}
var myArrayOfStrings:[String] = ["Hello","Playground","World"]
myArrayOfStrings -= "Hello"
print(myArrayOfStrings) // "[Playground, World]"
jeśli trzeba usunąć subArray z tablicy to jest to Idealne rozwiązanie przy użyciu Swift3:
var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
let subArrayToDelete = ["c", "d", "e", "ee"]
array = array.filter{ !subArrayToDelete.contains($0) }
print(array) // ["a", "b", "f", "g", "h", "i", "j"]
to jest lepsze dla wydajności niż usuwanie pojedynczo.
btw nawet szybciej rozwiązaniem jest (ale będzie to zmienić pozycji w końcowej tablicy):
array = Array(Set(array).subtracting(subArrayToDelete))
Korzystanie filtr jak zasugerowano powyżej jest miły. Ale jeśli chcesz, aby usunąć tylko jedno wystąpienie wartości lub można zakładać nie ma duplikatów w tablicy i chcesz szybszego algorytmu, to wykorzystać (w Swift3):
if let index = array.index(of: "stringToRemove") {
array.remove(at: index)
} else {
// not found
}
remove to metoda mutowania, bez konieczności ponownego przypisywania jej do tablicy. 'array.remove (at: index)' –
Masz rację Leo, naprawiłem to. –
- 1. Usunięcie określonego elementu z listy przy użyciu LINQ
- 2. javascript - usunięcie elementu
- 3. Jaki jest najlepszy sposób na usunięcie elementu tablicy w PHP?
- 4. Jaki jest najlepszy sposób na usunięcie pierwszego elementu z tablicy?
- 5. Reakcja - usunięcie ze środka listy powoduje usunięcie ostatniego elementu.
- 6. Swift: Pobierz wszystkie subviews określonego typu i dodaj do tablicy
- 7. Usunięcie elementu kątowego nie działa?
- 8. Usunięcie elementu mapy według wartości
- 9. Usunięcie lub ukrycie elementu svg
- 10. Grupowanie według określonego elementu tablicy ze strukturą agregacji mongo
- 11. Uzyskiwanie dostępu do określonego elementu tablicy w szablonie Angular2
- 12. Usunięcie określonego słowa z ciągu znaków
- 13. Usunięcie rzędnej paska narzędzi dla określonego fragmentu
- 14. Usunięcie klucza z asocjacyjnej tablicy
- 15. Usunięcie tablicy as3 według indeksu
- 16. Jak usunąć wiele elementów z tablicy SWIFT?
- 17. Czy usunięcie elementu skryptu powoduje usunięcie jego funkcji z pamięci?
- 18. Dodawanie elementu IList do określonego numeru indeksu
- 19. Najbardziej elegancki sposób na usunięcie elementu ciągowego
- 20. clojure - usunięcie elementu z wektora odniesienia
- 21. JavaScript odpowiadający ciągowi Ruby # scan
- 22. Zerowanie/usunięcie zer z tablicy numpy
- 23. Modyfikowanie ostatniego elementu tablicy
- 24. Edytor interfejsu Kendo - Usunięcie określonego narzędzia z menu edytora
- 25. Usunięcie określonego znaku z łańcucha na podstawie wartości szesnastkowej
- 26. Usuń wszystkie dane z określonego obiektu Realm Swift
- 27. Najlepszy sposób na usunięcie elementu z tablicy bez zmiany jej rozmieszczenia
- 28. jak uzyskać dostęp do określonego elementu każdego elementu widoku siatki
- 29. Usuń wszystkie elementy z tablicy pasujące do określonego ciągu
- 30. jQuery Usuwanie określonego tekstu z elementu
Pan spojrzał na metod w Odwołanie do klasy NSMutableArray, jak removeObject :, lub removeObjectIdenticalTo :? – rdelmar
Używam szybkiego, a sposób, w jaki znajduję to, co mogę zrobić z tablicą, to wstawienie kropki po nazwie i zobaczenie, jakie opcje sugeruje xcode, to między innymi removeAll, removeAtIndex, removeLast i removeRange. Nie widzę żadnego odniesienia do removeObjectIdenticalTo. – TimWhiting
W pytaniu nie określono, czy chodziło o Swift Array czy NSMutableArray; możesz użyć eteru w Swift.Jeśli programujesz w Swift, nie zobaczysz sugestii NSMutableArray, chyba że rzucisz tablicę na NSMutableArray – rdelmar