创建一个包含元素的列表可以从另一个列表

时间:2016-01-29 11:04:47

标签: c# .net linq list

标题可能不如我想要的那么准确。我将使用一个例子向您展示:

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

我知道这个列表对任何人来说都可能看起来完全无用,但我真的需要它继续我的程序。真的很感激这个帮助!

2 个答案:

答案 0 :(得分:10)

LINQ通过SelectManyEnumerable.Repeat

轻松实现这一目标
urlpatterns = patterns(
    '',
    url(r'^newurl/$', my_view, name="my_view"),
    url(r'^oldurl/$', RedirectView.as_view(pattern_name='app:my_view')
)

var result = input.SelectMany(x => Enumerable.Repeat(x, x)).ToList(); 是一个展平操作:对于原始序列中的每个输入,使用给定的投影生成一个新序列...并且整体结果是包含所有那些“子序列”作为一个平面的序列序列

从那里,您只需要投影 - 在您的情况下是“对于元素SelectMany,结果是xx次”。这可以通过x轻松完成。

答案 1 :(得分:5)

您可以Linq onSucceded handlerEnumerable.Repeat一起使用SelectMany

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

SelectMany 扩展方法会使用给定谓词选择IEnumerable<T>s并将其展平为一个IEnumerable<T> (不一定是调用该方法的T的{​​{1}}!)

Enumerable.Repeat 方法,会收到重复某个IEnumerable<T>的时间并返回object的{​​{1}} {1}}重复。