-2
votes

Comment créer des sublistes d'une liste avec Linq?

voici une autre façon diviser une liste dans des listes plus petites de N Taille

Le but de ce message est de partager la connaissance impliquant des "Linq" et des opinions sans utiliser "pour" cravates et "gammes" directement. p>

Exemple: j'ai une liste de 100 articles et j'ai besoin de le faire dans 10 listes. P>

J'utilise le script suivant, quelqu'un a une meilleure façon ou plus performante? P>

var subLists = myList.Select((x, i) => new { Index = i, Item = x })
                     .GroupBy(x => x.Index / "MAXIMUM ITEMS ON SUBLIST")
                     .Select(x => x.Select(v => X.Item).ToList());


5 commentaires

@Rodrigo: J'ai formaté votre code pour le rendre lisible. Jetez un coup d'œil à votre question et explorez le bouton {} de l'éditeur.


LINQ est la méthode la plus rapide.


Dupliqué possible de diviser une liste dans des listes plus petites de N Taille


@ Flydog57, merci pour votre aide !!! Je suis nouveau ici comme un contributeur.


@jdweng, merci pour la collaboration!


3 Réponses :


4
votes

C'est une opération lente xxx pré>

Voici une méthode d'extension qui fonctionnera avec n'importe quelle liste P> xxx pré>

ou meilleure performance P >

public static List<List<T>> splitList<T>(this List<T> items, int size)
{
    List<List<T>> list = new List<List<T>>();
    for (int i = 0; i < items.Count; i += size)
        list.Add(items.GetRange(i, Math.Min(size, items.Count - i)));
    return list;
}


0 commentaires

1
votes

Créons une réponse générique. Celui qui fonctionne pour toute séquence de toute longueur, où vous souhaitez diviser la séquence en une séquence de sous-séquences, où chaque sous-séquence a une longueur spécifiée, sauf peut-être pour le dernier:

Par exemple: P> Par exemple: P> Par exemple: P> >

// Get all Students that live in New York, split them into groups of 10 Students
// and return groups that have at least one Law Student 
var newYorkLasStudentGroups = GetStudents();
   .OrderBy(student => student.UniversityLocation == "New York")
   .Split(10)
   .Where(studentGroup => studentGroup.Any(student => student.Study == "Law"));


0 commentaires

0
votes

Cette question n'est pas une duplication. Comme mentionné, je me demande une forme possible à l'aide de Linq qui serait plus performe. "Pour" liens avec "gamme", par exemple, je suis au courant de.

Merci à tous pour votre collaboration, vos commentaires et des solutions possibles !!!


0 commentaires