【问题标题】:best way to compare items inside a loop比较循环内项目的最佳方法
【发布时间】:2011-04-08 22:16:35
【问题描述】:

我有一个对象的集合。我需要遍历集合并生成另一个集合。第二个集合中的每个项目都是第一个集合中两个项目的函数。所以为了简化问题。

假设集合是一组整数。

 List<int> myIntCollection = new List<int>() {1, 4, 6, 8, 7};

我需要生成第二个集合,其中每个项目是第一个集合中 2 个项目的总和。所以第二个集合在转换后会有这些元素。

 List<int> generatedCollection = new List<int>() {5, 10, 14, 15};

如您所见,第一个元素是 5(这是顶部集合中前两项的总和),第二个元素是 10,这是第一个集合中第二项和第三项的总和,等等上 。 .

【问题讨论】:

    标签: c# collections


    【解决方案1】:

    您可以使用for 循环:

    List<int> result = new List<int>(source.Count - 1);
    
    for (int i = 0; i < source.Count - 1; i++)
        result.Add(source[i] + source[i + 1]);
    

    这并不难!

    【讨论】:

    • 最后一个不会抛出异常吗?
    • @pete no,因为他正在计数 - 支票中的 1。
    • 对不起,如果我很密集,但不是计数 - 1 已经需要吗?列表索引不是从零开始的吗?
    • @Pete:你的两个 cmets 互相回答。
    • @Pete 他在做 i
    【解决方案2】:
    int i = 0;
    generatedCollection.AddRange(
                myIntCollection.Where(j => i < myIntCollection.Count - 1).Select(
                    j => myIntCollection[i] + myIntCollection[i++ + 1]));
    

    【讨论】:

      【解决方案3】:

      您可以使用Enumerable.Range 方法动态创建一个集合,并为每个索引获取两个项目的总和:

      List<int> generatedCollection =
        Enumerable.Range(0, myIntCollection.Length - 1)
        .Select(i => myIntCollection[i] + myIntCollection[i + 1])
        .ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多