Comment supprimer un élément d'un tableau en C#
disons que j'ai ce tableau,
int[] numbers = {1, 3, 4, 9, 2};
Comment puis-je supprimer un élément par "nom"? , permet de dire que le numéro 4?
même ArrayList
n'a pas aidé à supprimer?
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);
}
10 réponses
si vous voulez supprimer toutes les instances de 4 sans avoir besoin de connaître l'index:
LINQ: (.net Framework 3.5)
int[] numbers = { 1, 3, 4, 9, 2 };
int numToRemove = 4;
numbers = numbers.Where(val => val != numToRemove).ToArray();
Non LINQ: (. NET Framework 2.0)
static bool isNotFour(int n)
{
return n != 4;
}
int[] numbers = { 1, 3, 4, 9, 2 };
numbers = Array.FindAll(numbers, isNotFour).ToArray();
si vous voulez supprimer juste la première instance:
LINQ: (.net Framework 3.5)
int[] numbers = { 1, 3, 4, 9, 2, 4 };
int numToRemove = 4;
int numIndex = Array.IndexOf(numbers, numToRemove);
numbers = numbers.Where((val, idx) => idx != numIndex).ToArray();
Non LINQ: (. NET Framework 2.0)
int[] numbers = { 1, 3, 4, 9, 2, 4 };
int numToRemove = 4;
int numIdx = Array.IndexOf(numbers, numToRemove);
List<int> tmp = new List<int>(numbers);
tmp.RemoveAt(numIdx);
numbers = tmp.ToArray();
"Edit: juste au cas où vous ne l'aviez pas déjà compris, comme Malfist l'a souligné, vous devez cibler le .net Framework 3.5 afin de Exemples de codes LINQ à travailler. Si vous ciblez 2.0, vous devez faire référence aux exemples Non LINQ.
int[] numbers = { 1, 3, 4, 9, 2 };
numbers = numbers.Except(new int[]{4}).ToArray();
vous pouvez également convertir votre tableau en liste et appeler supprimer sur la liste. Vous pouvez alors convertir de nouveau à votre tableau.
int[] numbers = {1, 3, 4, 9, 2};
var numbersList = numbers.ToList();
numbersList.Remove(4);
le code qui est écrit dans la question comporte un bug
votre arraylist contient des chaînes de "1" "3" "4" "9" et" 2 "(noter les espaces)
donc IndexOf (4) ne trouvera rien parce que 4 est un int, et même "tostring" le convertirait en "4" et non "4", et rien ne sera enlevé.
un arraylist est la bonne façon d'aller faire ce que vous voulez.
la réponse de Balabaster est correcte si vous voulez supprimer toutes les instances de l'élément. Si vous voulez supprimer seulement le premier, vous feriez quelque chose comme ceci:
int[] numbers = { 1, 3, 4, 9, 2, 4 };
int numToRemove = 4;
int firstFoundIndex = Array.IndexOf(numbers, numToRemove);
if (numbers >= 0)
{
numbers = numbers.Take(firstFoundIndex).Concat(numbers.Skip(firstFoundIndex + 1)).ToArray();
}
j'ai posté ma solution ici .
ceci est une façon de supprimer un élément de tableau sans Copier vers un autre tableau - juste dans le cadre de la même instance de tableau:
public static void RemoveAt<T>(ref T[] arr, int index)
{
for (int a = index; a < arr.Length - 1; a++)
{
// moving elements downwards, to fill the gap at [index]
arr[a] = arr[a + 1];
}
// finally, let's decrement Array's size by one
Array.Resize(ref arr, arr.Length - 1);
}
Supprimer d'un tableau lui-même n'est pas simple, car vous avez alors à traiter avec le redimensionnement. C'est l'un des grands avantages d'utiliser quelque chose comme un List<int>
à la place. Il fournit Remove
/ RemoveAt
dans 2.0, et beaucoup D'extensions LINQ pour 3.0.
Si vous le pouvez, refactoriser d'utiliser un List<>
ou similaire.
comme extension générique, 2.0-compatible:
using System.Collections.Generic;
public static class Extensions {
//=========================================================================
// Removes all instances of [itemToRemove] from array [original]
// Returns the new array, without modifying [original] directly
// .Net2.0-compatible
public static T[] RemoveFromArray<T> (this T[] original, T itemToRemove) {
int numIdx = System.Array.IndexOf(original, itemToRemove);
if (numIdx == -1) return original;
List<T> tmp = new List<T>(original);
tmp.RemoveAt(numIdx);
return tmp.ToArray();
}
}
Utilisation:
int[] numbers = {1, 3, 4, 9, 2};
numbers = numbers.RemoveFromArray(4);
pour supprimer des éléments de la chaîne basée sur les valeurs clés du dictionnaire. "VB.net code
Dim stringArr As String() = "file1,file2,file3,file4,file5,file6".Split(","c)
Dim test As Dictionary(Of String, String) = New Dictionary(Of String, String)
test.Add("file3", "description")
test.Add("file5", "description")
stringArr = stringArr.Except(test.Keys).ToArray()
vous pouvez faire de cette façon:
int[] numbers= {1,3,4,9,2};
List<int> lst_numbers = new List<int>(numbers);
int required_number = 4;
int i = 0;
foreach (int number in lst_numbers)
{
if(number == required_number)
{
break;
}
i++;
}
lst_numbers.RemoveAt(i);
numbers = lst_numbers.ToArray();