如何在C#中獲取列表的前N個元素?

我想使用Linq來查詢我項目中的公交時刻表,以便隨時能夠得到下一個5次公交車到達時間。 如何將查詢限制爲前5個結果? 數組

更通常地說,我如何在C#中獲取一個列表? (在Python中我會使用mylist[:5]來獲取前5個元素。) this


#1樓

var firstFiveItems = myList.Take(5);

或切片: spa

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

固然,按照某種順序獲取前五個項目一般很方便: code

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

#2樓

若是有人有興趣(即便問題沒有要求這個版本),在C#2中將是:(我已經編輯了答案,遵循一些建議) orm

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

#3樓

要得到前5個元素更好地使用這樣的表達式: 排序

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

要麼 element

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

它將比orderBy變體更快,由於LINQ引擎不會由於執行延遲而掃描全部列表,而且不會對全部數組進行排序。 string

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)
    }
}

#4樓

pagination同樣,您能夠使用下面的公式來獲取slice of list or elements

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

例1:前五項

var pageNumber = 1;
var pageSize = 5;

示例2:後五項

var pageNumber = 2;
var pageSize = 5;

例3:第五項

var pageNumber = 3;
var pageSize = 5;

若是注意到formule參數pageSize = 5而且pageNumber正在更改,若是要更改切片中的項目數,則更改pageSize

相關文章
相關標籤/搜索