Programming

C #에서 목록의 첫 번째 N 요소를 얻는 방법은 무엇입니까?

procodes 2020. 3. 2. 13:20
반응형

C #에서 목록의 첫 번째 N 요소를 얻는 방법은 무엇입니까?


Linq를 사용하여 프로젝트에서 버스 일정을 쿼리하여 언제든지 다음 5 개의 버스 도착 시간을 얻을 수 있습니다. 검색어를 처음 5 개의 결과로 제한하려면 어떻게해야합니까?

더 일반적으로 C #에서 목록을 어떻게 가져갈 수 있습니까? (파이썬에서는 mylist[:5]처음 5 개의 요소를 얻는 데 사용 합니다.)


var firstFiveItems = myList.Take(5);

또는 슬라이스 :

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

물론 어떤 종류의 순서에 따라 처음 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)
    }
}

참고 URL : https://stackoverflow.com/questions/319973/how-to-get-first-n-elements-of-a-list-in-c



반응형