una tipos resueltos listas lista insertar fuente estructura estatica enlazadas eliminar elementos elemento ejercicios datos código como codigo buscar agregar c#

tipos - ¿Cómo obtener los primeros N elementos de una lista en C#?



listas estructura de datos c++ (4)

Al igual que la pagination , puede usar la siguiente fórmula para tomar slice of list or elements :

var slice = myList.Skip((pageNumber - 1) * pageSize) .Take(pageSize);

Ejemplo 1: primeros cinco artículos

var pageNumber = 1; var pageSize = 5;

Ejemplo 2: segundos cinco elementos

var pageNumber = 2; var pageSize = 5;

Ejemplo 3: terceros cinco elementos

var pageNumber = 3; var pageSize = 5;

Si la notificación a los parámetros de fórmula pageSize = 5 y pageNumber está cambiando, si desea cambiar la cantidad de elementos en la división, cambie el pageSize .

Me gustaría usar Linq para consultar un horario de autobús en mi proyecto, para que en cualquier momento pueda obtener los próximos 5 horarios de llegada de autobuses. ¿Cómo puedo limitar mi consulta a los primeros 5 resultados?

De manera más general, ¿cómo puedo tomar una porción de una lista en C #? (En Python usaría mylist[:5] para obtener los primeros 5 elementos.)


En caso de que alguien esté interesado (incluso si la pregunta no pide esta versión), en C # 2 sería: (He editado la respuesta, siguiendo algunas sugerencias)

myList.Sort(CLASS_FOR_COMPARER); List<string> fiveElements = myList.GetRange(0, 5);


Para tomar los primeros 5 elementos mejor usar expresiones como esta:

var firstFiveArrivals = myList.Where([EXPRESSION]).Take(5);

o

var firstFiveArrivals = myList.Where([EXPRESSION]).Take(5).OrderBy([ORDER EXPR]);

Será más rápido que la variante orderBy, porque el motor LINQ no escaneará toda la lista debido a la ejecución demorada, y no ordenará toda la matriz.

class MyList : IEnumerable<int> { int maxCount = 0; public int RequestCount { get; private set; } public MyList(int maxCount) { this.maxCount = maxCount; } public void Reset() { RequestCount = 0; } #region IEnumerable<int> Members public IEnumerator<int> GetEnumerator() { int i = 0; while (i < maxCount) { RequestCount++; yield return i++; } } #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw new NotImplementedException(); } #endregion } class Program { static void Main(string[] args) { var list = new MyList(15); list.Take(5).ToArray(); Console.WriteLine(list.RequestCount); // 5; list.Reset(); list.OrderBy(q => q).Take(5).ToArray(); Console.WriteLine(list.RequestCount); // 15; list.Reset(); list.Where(q => (q & 1) == 0).Take(5).ToArray(); Console.WriteLine(list.RequestCount); // 9; (first 5 odd) list.Reset(); list.Where(q => (q & 1) == 0).Take(5).OrderBy(q => q).ToArray(); Console.WriteLine(list.RequestCount); // 9; (first 5 odd) } }


var firstFiveItems = myList.Take(5);

O para rebanar:

var secondFiveItems = myList.Skip(5).Take(5);

Y, por supuesto, a menudo es conveniente obtener los primeros cinco artículos de acuerdo con algún tipo de orden:

var firstFiveArrivals = myList.OrderBy(i => i.ArrivalTime).Take(5);