Linq를 사용하여 프로젝트에서 버스 일정을 쿼리하여 언제든지 다음 5 개의 버스 도착 시간을 얻을 수 있습니다. 검색어를 처음 5 개의 결과로 제한하려면 어떻게해야합니까?
더 일반적으로 C #에서 목록을 어떻게 가져갈 수 있습니까? (파이썬에서는 mylist[:5]
처음 5 개의 요소를 얻는 데 사용 합니다.)
답변
var firstFiveItems = myList.Take(5);
또는 슬라이스 :
var secondFiveItems = myList.Skip(5).Take(5);
물론 어떤 종류의 순서에 따라 처음 다섯 개의 항목을 얻는 것이 편리합니다.
var firstFiveArrivals = myList.OrderBy(i => i.ArrivalTime).Take(5);
답변
질문 이이 버전을 요구하지 않더라도 누구나 관심이있는 경우 C # 2에서는 다음과 같습니다.
myList.Sort(CLASS_FOR_COMPARER);
List<string> fiveElements = myList.GetRange(0, 5);
답변
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)
}
}