创建一个列表,其中包含另一个列表的元素计数可靠

本文关键字:列表 另一个 元素 包含 一个 创建 | 更新日期: 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 通过 SelectManyEnumerable.Repeat 使这变得容易:

var result = input.SelectMany(x => Enumerable.Repeat(x, x)).ToList();

SelectMany是一个扁平化操作:对于原始序列中的每个输入,使用给定的投影生成一个新序列......总体结果是一个序列,其中包含所有这些"子序列"作为一个平面序列。

从那里,你只需要投影 - 在你的例子中是"对于一个元素x,结果是xx倍"。这很容易用Enumerable.Repeat(x, x)来完成。

您可以将LinqEnumerable.RepeatSelectMany一起使用:

List<int> newList = otherList
    .SelectMany(x => Enumerable.Repeat(x, x))
    .ToList();

SelectMany 扩展方法采用使用给定谓词选择IEnumerable<T>并将它们展平为一个IEnumerable<T>(不一定与调用该方法的IEnumerable<T> T相同!

Enumerable.Repeat 方法接收重复特定object的次数,并返回该object重复的IEnumerable