【问题标题】:Do LINQ operations return collections with the same indexes as collection being operated on? [duplicate]LINQ 操作是否返回与正在操作的集合具有相同索引的集合? [复制]
【发布时间】:2014-01-21 22:52:29
【问题描述】:

如果我对一个集合执行.Select(),生成的集合是否会在两个集合之间共享精确的索引值。

也许我没有很好地解释自己。这就是我的意思:

int[] nums = new int[]{ 50, 100, 200};

var moreNums = nums.Select(num => num / 2);

moreNums[0] = 25 吗? [1] = 50? [2] = 100?

您能否在 100% 的时间里依靠这个?因此,我总是对 LINQ 感到模棱两可。这很重要,因为我有两个列表,我可以在其中使用单个索引来引用两个列表之间的一对值。我不希望我的列表不同步。

【问题讨论】:

  • 那为什么要使用两个列表呢?将它们组合成一个类。
  • 好吧,如果没有,那么我将只有一个 for 循环并手动使用索引。我所做的并不保证创建一个新的类。
  • 是的,您可以依赖与从源集合中获取相同的顺序返回的项目。
  • 确实是重复的,谢谢你给我指明了正确的方向!

标签: c# linq


【解决方案1】:

Select 方法逻辑非常简单:它一次从您的source 集合中获取一个元素,应用selector 函数并产生结果。该功能称为延迟执行 - 元素在需要时从 source 集合中获取,然后立即返回。

Select可以写成:

public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
    foreach(var item in source)
    {
        yield return selector(source);
    }
}

如您所见,无法使用 Select 方法以不同的顺序获取项目

实际上这个方法看起来有点复杂,但逻辑是完全一样的。

【讨论】:

    【解决方案2】:

    是的,它总是给出您期望的结果
    我已经完成了这段代码,它总是有效的

    List<decimal> MyList = new List<decimal>() { 10,20,30,40};
    var Output= MyList.Select(s => s / 2).ToList();
    

    Output 中的结果是

    5  
    10
    15
    20
    

    【讨论】:

      【解决方案3】:

      25 50 100case 1

      0 50 100case 2

      0 50 100case 3。不是5 50

      int[] nums = new int[]{ 50, 100, 200};
      
      var moreNums = nums.Select(num => num / 2);
      
      // case 1
      foreach (var item in moreNums) Console.Write("{0} ", item);
      Console.WriteLine();
      
      // case 2
      nums[0] = 0;
      
      foreach (var item in moreNums) Console.Write("{0} ", item);
      Console.WriteLine();
      
      // case 3
      nums = new int[]{ 10, 100 };
      
      foreach (var item in moreNums) Console.Write("{0} ", item);
      Console.WriteLine();
      

      【讨论】:

      • 我认为你没有理解这个问题。
      • 很抱歉造成了误会。
      猜你喜欢
      • 2014-09-17
      • 2017-05-22
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多