답변:
var firstFiveItems = myList.Take(5);
또는 슬라이스 :
var secondFiveItems = myList.Skip(5).Take(5);
물론 어떤 종류의 순서에 따라 처음 다섯 개의 항목을 얻는 것이 편리합니다.
var firstFiveArrivals = myList.OrderBy(i => i.ArrivalTime).Take(5);
.Take(n)
TakeIterator 를 리턴 한다는 점에 유의해야 합니다. n
요소가 있는 목록을 반환하지 않습니다 (많은 것을 사용할 수 있다고 가정). 사용 .ToArray()
또는 .ToList()
의 결과에는 Take
구체적인 배열 또는 목록을 얻을 수 있습니다.
질문 이이 버전을 요구하지 않더라도 누구나 관심이있는 경우 C # 2에서는 다음과 같습니다.
myList.Sort(CLASS_FOR_COMPARER);
List<string> fiveElements = myList.GetRange(0, 5);
Skip
+ Take
가 똑똑한 지 또는 건너 뛴 항목을 열거하는지 여부는 알 수 없습니다 . 그리고 나는 알 필요가 없습니다-나는 단지 GetRange를 사용합니다 (목록을 주었을 때). 두 번째 매개 변수가 마지막 인덱스가 아닌 카운트 인지 확인하십시오 .
.Take(n)
보다 적은 n
요소 가 있으면 걱정할 필요가 없다는 것 입니다. 문제 List<T>.GetRange(0, count)
는 당신이 걱정할 필요가 있다는 것입니다 .... 당신은 항목 ArgumentException
이없는 경우 얻을 것이다 count
.
pagination
당신이 복용을 위해 아래 공식을 사용할 수있는 것처럼 slice of list or elements
:
var slice = myList.Skip((pageNumber - 1) * pageSize)
.Take(pageSize);
예 1 : 처음 5 개 항목
var pageNumber = 1;
var pageSize = 5;
예 2 : 두 번째 다섯 항목
var pageNumber = 2;
var pageSize = 5;
예 3 : 세 번째 다섯 항목
var pageNumber = 3;
var pageSize = 5;
매개 변수를 공식화
pageSize = 5
하고pageNumber
변경하는 경우 슬라이싱에서 항목 수를 변경하려면을 변경하십시오pageSize
.
처음 5 개 요소를 가져 오려면 다음과 같이 식을 더 잘 사용하십시오.
var firstFiveArrivals = myList.Where([EXPRESSION]).Take(5);
또는
var firstFiveArrivals = myList.Where([EXPRESSION]).Take(5).OrderBy([ORDER EXPR]);
LINQ 엔진은 실행 지연으로 인해 모든 목록을 검색하지 않고 모든 배열을 정렬하지 않기 때문에 orderBy 변형보다 빠릅니다.
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)
}
}