Powiedzmy, że mam tę tablicę,
int[] numbers = {1, 3, 4, 9, 2};
Jak mogę usunąć element za pomocą „nazwy”? powiedzmy numer 4?
Nawet ArrayList
nie pomógł usunąć?
string strNumbers = " 1, 3, 4, 9, 2";
ArrayList numbers = new ArrayList(strNumbers.Split(new char[] { ',' }));
numbers.RemoveAt(numbers.IndexOf(4));
foreach (var n in numbers)
{
Response.Write(n);
}
Odpowiedzi:
Jeśli chcesz usunąć wszystkie wystąpienia 4 bez konieczności znajomości indeksu:
LINQ: (.NET Framework 3.5)
Non-LINQ: (.NET Framework 2.0)
Jeśli chcesz usunąć tylko pierwszą instancję:
LINQ: (.NET Framework 3.5)
Bez LINQ: (.NET Framework 2.0)
Edycja: na wypadek, gdybyś jeszcze tego nie rozgryzł, jak zauważył Malfist, musisz skupić się na .NET Framework 3.5, aby przykłady kodu LINQ działały. Jeśli celujesz w 2,0, musisz odwołać się do przykładów innych niż LINQ.
źródło
źródło
Możesz także przekonwertować swoją tablicę na listę i wywołać usuń na liście. Następnie możesz przekonwertować z powrotem na swoją tablicę.
źródło
Kod, który jest zapisany w pytaniu, zawiera błąd
Twoja lista zawiera ciągi znaków „1” „3” „4” „9” i „2” (zwróć uwagę na spacje)
Więc IndexOf (4) nic nie znajdzie, ponieważ 4 jest liczbą int, a nawet „tostring” zamieniłoby ją na „4”, a nie „4”, i nic nie zostanie usunięte.
Arraylist to właściwy sposób robienia tego, co chcesz.
źródło
List<T>
byłby lepszy niż ArrayList, wydaje się, że jest to jedyna odpowiedź, która poprawnie identyfikuje problem, który miał OP, kiedy próbował użyć ArrayList do rozwiązania swojego pierwotnego problemu. OP zrozumiał, że nie możesz zmieniać rozmiaru tablic, czego nikt inny nie zauważył, i zamiast tego próbował użyć typu zmieniającego rozmiar, którego nikt inny nie zauważył, a następnie wpadł w inny problem, na który nikt inny się nie wydaje zauważyć.Odpowiedź Balabaster jest poprawna, jeśli chcesz usunąć wszystkie wystąpienia elementu. Jeśli chcesz usunąć tylko pierwszy, zrób coś takiego:
źródło
Opublikowałem tutaj swoje rozwiązanie .
To jest sposób na usunięcie elementu tablicy bez kopiowania do innej tablicy - tylko w ramce tej samej instancji tablicy:
źródło
Usunięcie z tablicy nie jest proste, ponieważ wtedy musisz poradzić sobie ze zmianą rozmiaru. Jest to jedna z największych zalet używania czegoś takiego jak
List<int>
a. ZapewniaRemove
/RemoveAt
w 2.0 i wiele rozszerzeń LINQ dla 3.0.Jeśli możesz, refaktoryzuj, aby użyć
List<>
lub podobnego.źródło
Jako ogólne rozszerzenie, kompatybilne z 2.0:
Stosowanie:
źródło
„ Aby usunąć elementy z ciągu znaków na podstawie wartości kluczy słownika. „Kod VB.net
źródło
Możesz to zrobić w ten sposób:
źródło