标题可能不如我想要的那么准确。我将使用一个例子向您展示:
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
我知道这个列表对任何人来说都可能看起来完全无用,但我真的需要它继续我的程序。真的很感激这个帮助!
答案 0 :(得分:10)
LINQ通过SelectMany
和Enumerable.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
,结果是x
,x
次”。这可以通过x
轻松完成。
答案 1 :(得分:5)
您可以Linq
onSucceded
handler与Enumerable.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}}重复。