zoukankan      html  css  js  c++  java
  • 【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扩展方法,为啥知道的人不多呢?

  • 相关阅读:
    使用Junit等工具进行单元测试
    软件工程学习、问题
    贪吃蛇
    使用Junit工具进行单元测试
    两人组
    软件工程的理解
    使用工具进行单元测试
    对软件工程的理解
    单元测试
    我对软件工程的理解
  • 原文地址:https://www.cnblogs.com/it-dennis/p/12730630.html
Copyright © 2011-2022 走看看