J'ai un List<String>
et je dois extraire une sous-liste de cette liste. Existe-t-il des méthodes de liste disponibles pour cela dans .NET 3.5 ?
Vous ne pouvez pas supprimer des éléments d'une liste tout en itérant sur eux avec un foreach..... !
J'ai un List<String>
et je dois extraire une sous-liste de cette liste. Existe-t-il des méthodes de liste disponibles pour cela dans .NET 3.5 ?
Vous voulez List::GetRange(firstIndex, count). Voir http://msdn.microsoft.com/en-us/library/21k0e39c.aspx
// I have a List called list
List sublist = list.GetRange(5, 5); // (gets elements 5,6,7,8,9)
List anotherSublist = list.GetRange(0, 4); // gets elements 0,1,2,3)
C'est ce que tu cherches ?
Si vous cherchez à supprimer les éléments de la sous-liste de la liste d'origine, vous pouvez alors le faire :
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Il s'agit d'une copie du segment de la liste originale, et non d'une vue sur une partie de la liste originale.
@Asad Le but de cette réponse était d'illustrer que le PO pouvait utiliser LINQ. Vous avez fait remarquer qu'il crée une copie. Fantastique. Vos talents pourraient probablement être mieux utilisés en éditant cette question pour illustrer le point encore plus finement que je l'avais laissé il y a 5 ans et demi. Si vous l'éditez, vous serez crédité dans la ligue de justice internet de la pédanterie, et ce sera bien mérité !
I ( comme d'autres personnes ) cherchait quelque chose de similaire à subList
de Java, qui expose une vue mutable de la liste originale. Le comportement est différent, ce qui n'est peut-être pas immédiatement évident. J'ai donc pensé qu'il serait utile de le signaler à toute personne qui verrait cela plus tard. Hors sujet, vous devriez peut-être vous mettre au yoga ou à la méditation ou quelque chose du genre ; vous êtes devenu fou sans aucune provocation.
Utilisez la clause Where de LINQ :
List<object> x = new List<object>();
x.Add("A");
x.Add("B");
x.Add("C");
x.Add("D");
x.Add("B");
var z = x.Where(p => p == "A");
z = x.Where(p => p == "B");
Dans les déclarations ci-dessus, "p" est l'objet qui se trouve dans la liste. Donc si vous avez utilisé un objet de données, c'est-à-dire :
public class Client
{
public string Name { get; set; }
}
alors votre linq ressemblerait à ceci :
List<Client> x = new List<Client>();
x.Add(new Client() { Name = "A" });
x.Add(new Client() { Name = "B" });
x.Add(new Client() { Name = "C" });
x.Add(new Client() { Name = "D" });
x.Add(new Client() { Name = "B" });
var z = x.Where(p => p.Name == "A");
z = x.Where(p => p.Name == "B");
Votre classe de collection pourrait avoir une méthode qui renvoie une collection (une sous-liste) basée sur les critères passés pour définir le filtre. Créez une nouvelle collection à l'aide de la boucle foreach et envoyez-la.
Ou encore, la méthode et la boucle peuvent modifier la collection existante en définissant un indicateur (propriété) "filtré" ou "actif". Cette solution pourrait fonctionner, mais pourrait également causer des problèmes dans un code multithread. Si d'autres objets dépendent du contenu de la collection, c'est une bonne ou une mauvaise chose selon la façon dont vous utilisez les données.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Pouvez-vous nous montrer un exemple de code de ce que vous avez, ou clarifier ? Je ne comprends pas la question.
1 votes
J'ai une liste, disons List<String> list = new list<String>() ; j'ai besoin de prendre une sous-liste de cette liste, disons de l'indice 2 à la longueur-1 .