J'ai un tableau:
arr[0]="a"
arr[1]="b"
arr[2]="a"
Je veux supprimer seulement arr[0]
, et garderarr[1]
et arr[2]
.
J'utilisais:
arr= arr.Where(w => w != arr[0]).ToArray();
Puisque arr[0]
et arr[2]
a la même valeur ("a"), le résultat obtenu est seulement arr[1]
.
Comment puis-je retourner les deux arr[1]
et arr[2]
, et ne supprime que arr[0]
?
Vous pouvez facilement le faire en utilisant Skip
:
arr = arr.Skip(1).ToArray();
Cela crée un autre tableau avec de nouveaux éléments, comme dans d'autres réponses. C'est parce que vous ne pouvez pas supprimer ou ajouter des éléments à un tableau. Les tableaux ont une taille fixe.
Vous pouvez essayer ceci:
arr = arr.ToList().RemoveAt(0).ToArray();
Nous faisons une liste basée sur le tableau que nous avons déjà, nous retirons l’élément à la position 0 et convertissons le résultat en tableau.
ou ca:
arr = arr.Where((item, index)=>index!=0).ToArray();
où nous utilisons la version surchargée de Where
, qui prend également pour argument l'index de l'élément. S'il vous plaît jeter un oeil ici .
Mettre à jour
Une autre façon, plus élégante que celle ci-dessus, comme le fait remarquer D Stanley , consiste à utiliser la méthode Skip
:
arr = arr.Skip(1).ToArray();
Que diriez-vous:
if (arr.Length > 0)
{
arr = arr.ToList().RemoveAt(0).ToArray();
}
return arr;
Utilisez la seconde surcharge de Enumerable.Where : -
arr = arr.Where((v,i) => i != 0).ToArray();