J'ai un List<String>
et j'ai besoin de prendre une sous-liste de cette liste. Existe-t-il des méthodes de liste disponibles pour cela dans .NET 3.5?Comment obtenir une sous-liste en C#
Répondre
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)
Est-ce que vous êtes après?
Si vous cherchez à supprimer les éléments de sous-liste de la liste initiale, vous pouvez faire:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Serait-il aussi facile que d'exécuter une requête LINQ sur votre liste?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
Ceci est une copie du segment de la liste d'origine, pas une vue sur une partie de la liste d'origine. –
@Asad Le but de cette réponse était d'illustrer que l'OP pouvait utiliser LINQ. Vous avez indiqué 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 fin que je l'avais laissé il y a 5,5 ans. Si vous l'éditez, vous obtiendrez le crédit dans la ligue de pédanterie de la justice Internet, et ce sera bien gagné! –
I ([comme d'autres personnes] (http: // stackoverflow.com/questions/1287340/net-equivalent-de-javas-list-sublist)) cherchait quelque chose de similaire à 'subList' de Java, qui expose une vue mutable dans la liste originale. Cela se comporte différemment, ce qui peut ne pas être immédiatement évident, alors j'ai pensé qu'il serait utile de le signaler pour le bénéfice de quiconque voit cela plus tard. Hors sujet, vous pourriez vouloir prendre le yoga ou la méditation ou quelque chose; vous êtes allé à la folie 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, à savoir:
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");
Après avoir élaboré, utilisez mon premier exemple et ajoutez ceci: z = x.GetRange (1, 3); x.RemoveRange (1, 3); x.AddRange (z.OrderByDescending (p => p)); – slugster
Votre classe de collection pourrait avoir une méthode qui retourne une collection (une sous-liste) en fonction des critères passé pour définir le filtre. Construisez une nouvelle collection avec la boucle foreach et transmettez-la. Ou, faites modifier la collection existante par la méthode et la boucle en définissant un drapeau "filtré" ou "actif" (propriété). Celui-ci pourrait fonctionner mais pourrait aussi causer des problèmes dans le code multithread. Si d'autres objets sont déformés sur le contenu de la collection, c'est bon ou mauvais selon la façon dont vous utilisez les données.
Inverser les éléments dans une sous-liste
int[] l = {0, 1, 2, 3, 4, 5, 6};
var res = new List<int>();
res.AddRange(l.Where((n, i) => i < 2));
res.AddRange(l.Where((n, i) => i >= 2 && i <= 4).Reverse());
res.AddRange(l.Where((n, i) => i > 4));
Donne 0,1,4,3,2,5,6
'Range' est vrai avec un type de données entier. Et si votre type de données est 'DataTime' et que vous avez besoin de récupérer une liste d'enregistrements entre deux dates spécifiques? – Jogi
- 1. Comment obtenir une adresse en C?
- 2. comment obtenir une horloge en temps réel en C#?
- 3. Comment obtenir une liste des assemblys en C#?
- 4. Comment obtenir une valeur d'un service Web XML en C#?
- 5. Comment obtenir une partie du chemin complet en C#?
- 6. Obtenir une entrée d'un fichier en C++
- 7. Obtenir une sous-chaîne en C
- 8. Comment obtenir l'heure du système en C++?
- 9. Cordes en C, comment obtenir sousChaîne
- 10. Comment obtenir des caractères continus en C#?
- 11. Obtenir une entrée utilisateur en utilisant CIN.get() en C++ question
- 12. Comment obtenir l'identification de l'appelant en C#?
- 13. Comment obtenir le type d'exception en C#
- 14. Comment obtenir DPI de l'image en C#
- 15. Comment obtenir le dossier% AppData% en C?
- 16. Comment obtenir ShowState d'une fenêtre en C# ou C++?
- 17. Comment obtenir une taille de virt de C/C++?
- 18. Comment obtenir des enregistrements de MySQL en c/C++? Ce
- 19. Comment dérouler une courte boucle en C++
- 20. Obtenir un IntPtr à une variable ulong en C#
- 21. Comment obtenir des éléments alternatifs en utilisant Enumerable en C#
- 22. Obtenir un membre via une chaîne en C#?
- 23. Comment obtenir une signature matérielle/logicielle unique à partir d'un PC Windows en c/C++
- 24. Comment obtenir une icône de type de fichier dans Windows en utilisant C/C++?
- 25. Comment convertir une chaîne en ascii en binaire en C#?
- 26. Obtenir l'onglet URL en C++
- 27. comment obtenir une réponse supplémentaire en ajax?
- 28. Comment obtenir une requête brute en PHP?
- 29. Comment obtenir une URL en PHP
- 30. comment intercepter l'exception en C# qui appelle une DLL C++
Pouvez-vous nous montrer un exemple de code de ce que vous avez, ou clarifient ? Je ne suis pas la question. – David
ya 3.5 .. désolé pour la faute de frappe .. –
J'ai une liste dire Liste liste = nouvelle liste (); je dois prendre une sous-liste de cette liste dire de l'index 2 à la longueur-1 .. –