【C# 代碼小技巧】巧用 linq select 實現遍歷集合返回元素 index


background

要求: 將 list 集合中的元素遍歷輸出的時候, 順便輸出其 index.

集合元素如下:

private List<string> dataSource = new List<string>() { "001", "002", "003", "004", "005" };

c# 代碼實現

以前我可能會這寫, 感覺很low:

public void Run_v1()
{
    var index = 0;

    foreach (var item in dataSource)
    {
        index++;
        Console.WriteLine($"{index}. {item}");
    }
}

使用 linq 的改進寫法:

public void Run_v2()
{
    var items = dataSource.Select((item, i) => $"{i + 1}. {item}").ToList();
    items.ForEach(i => Console.WriteLine(i));
}

select 源碼

public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    if (selector == null)
    {
        throw Error.ArgumentNull("selector");
    }
    return SelectIterator(source, selector);
}

private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
    int index = -1;
    foreach (TSource item in source)
    {
        index = checked(index + 1);
        yield return selector(item, index);
    }
}

reference

感謝:

Linq中帶有迭代索引的Select擴展方法,為啥知道的人不多呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM