创建一个列表,其中包含另一个列表的元素计数可靠
本文关键字:列表 另一个 元素 包含 一个 创建 | 更新日期: 2023-09-27 18:32:22
>标题可能没有我想要的那么准确。我将用一个例子向您展示它:
List<int> anotherList = new List<int>();
[0] 3
[1] 6
[2] 2
[3] 3
[4] 2
[5] 2
[6] 1
我要创建的List
应该包含乘以 anotherList
中的元素的元素。
例如:
List<int> newList = new List<int>();
[0] 3
[1] 3
[2] 3
[3] 6
[4] 6
[5] 6
[6] 6
[7] 6
[8] 6
[9] 2
[10] 2
[11] 3
[12] 3
[13] 3
[14] 2
[15] 2
[16] 2
[17] 2
[18] 1
我知道这个列表对任何人来说似乎都完全没用,但我真的需要它来继续我的程序。真的很感激这个帮助!
LINQ 通过 SelectMany
和 Enumerable.Repeat
使这变得容易:
var result = input.SelectMany(x => Enumerable.Repeat(x, x)).ToList();
SelectMany
是一个扁平化操作:对于原始序列中的每个输入,使用给定的投影生成一个新序列......总体结果是一个序列,其中包含所有这些"子序列"作为一个平面序列。
从那里,你只需要投影 - 在你的例子中是"对于一个元素x
,结果是x
,x
倍"。这很容易用Enumerable.Repeat(x, x)
来完成。
您可以将Linq
的Enumerable.Repeat
与SelectMany
一起使用:
List<int> newList = otherList
.SelectMany(x => Enumerable.Repeat(x, x))
.ToList();
SelectMany
扩展方法采用使用给定谓词选择IEnumerable<T>
并将它们展平为一个IEnumerable<T>
。(不一定与调用该方法的IEnumerable<T>
T
相同!
Enumerable.Repeat
方法接收重复特定object
的次数,并返回该object
重复的IEnumerable
。