C# LINQ操作返回的集合是否与正在操作的集合具有相同的索引?
如果我对一个集合执行C# LINQ操作返回的集合是否与正在操作的集合具有相同的索引?,c#,linq,C#,Linq,如果我对一个集合执行.Select(),则生成的集合将在两个集合之间共享精确的索引值 也许我没有解释清楚。我的意思是: int[] nums = new int[]{ 50, 100, 200}; var moreNums = nums.Select(num => num / 2); 莫伦姆斯[0]=25吗?[1] = 50? [2] =100 你能百分之百地相信这一点吗?正因为如此,我对林克总是有一种模棱两可的感觉。这一点很重要,因为我有两个列表,可以使用单个索引引用两个列表之间的一
.Select()
,则生成的集合将在两个集合之间共享精确的索引值
也许我没有解释清楚。我的意思是:
int[] nums = new int[]{ 50, 100, 200};
var moreNums = nums.Select(num => num / 2);
莫伦姆斯[0]=25吗?[1] = 50? [2] =100
你能百分之百地相信这一点吗?正因为如此,我对林克总是有一种模棱两可的感觉。这一点很重要,因为我有两个列表,可以使用单个索引引用两个列表之间的一对值。我不希望我的列表失去同步。是的,它已经给出了您期望的结果
我已经完成了这段代码,它一直都能工作
List<decimal> MyList = new List<decimal>() { 10,20,30,40};
var Output= MyList.Select(s => s / 2).ToList();
25 50 100
案例1中的
0 50 100
案例2中的
案例3中的050100
。非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();
Select
方法逻辑非常简单:它一次从您的source
集合中获取一个元素,应用selector
函数并生成结果。该特性称为延迟执行-元素在需要时从源集合一次提取一个,然后立即返回
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);
}
}
公共静态IEnumerable选择(此IEnumerable源,Func选择器)
{
foreach(源中的var项)
{
收益率返回选择器(源);
}
}
如您所见,仅使用Select
method无法按不同顺序获取项目
实际上,该方法看起来有点复杂,但逻辑完全相同。那么为什么要使用两个列表呢?在一个类中对它们进行配对。如果没有,那么我将使用for循环并手动使用索引。我所做的并不保证创建一个新类。是的,您可以依赖于返回的项目的顺序与从源集合中获取的项目的顺序相同。它确实是重复的,谢谢您为我指明了正确的方向!我想你还没有理解这个问题。很抱歉,有误会。
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
foreach(var item in source)
{
yield return selector(source);
}
}