LINQ操作是否返回与正在操作的集合具有相同索引的集合?

时间:2014-01-04 06:20:04

标签: c# linq

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

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

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

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

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

你可以100%的时间用钱吗?因此,我总是对LINQ感到一种不安的感觉。这很重要,因为我有两个列表,我可以使用单个索引来引用两个列表之间的一对值。我不希望我的列表不同步。

3 个答案:

答案 0 :(得分:6)

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方法以不同顺序获取商品!

在实践中,该方法看起来有点复杂,但逻辑完全相同。

答案 1 :(得分:1)

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

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

Output中的结果是

5  
10
15
20

答案 2 :(得分:-1)

25 50 100中的

case 1

0 50 100中的

case 2

0 50 100中的

case 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();