UserList
是一个词典列表,如:
[
{Name:"Alex",Age:25},
{Name:"Peter",Age:35},
{Name:"Muhammad",Age:28},
{Name:"Raul",Age:29}
]
RowColorList
是一个颜色列表:[#bcf,#fc0]
新UserList
每个名称应包含一个RowColor
,按RowColorList
的顺序排列:
[
{Name:"Alex",Age:25,RowColor:#bcf},
{Name:"Peter",Age:35,RowColor:#fc0},
{Name:"Muhammad",Age:28,RowColor:#bcf},
{Name:"Raul",Age:29,RowColor:#fc0}
]
我尝试了以下代码:
UserList.Zip(RowColorList,(user,color) => user.Add("RowColor",color))
使用此代码,新UserList
将只包含RowColorList
中的条目。我希望他在可用颜色用完之后再次从RowColorList
开始。怎么样?
答案 0 :(得分:6)
您可以创建一个函数来返回Color
/ string
的无限可枚举(或RowColor
的任何类型)
public IEnumerable<Color> InfiniteColors()
{
while (true)
{
foreach (var color in RowColors)
{
yield return color;
}
}
}
然后,这可以与任何Linq IEnumerable
扩展方法一起使用,例如Zip
。
UserList.Zip(InfiniteColors(),(user,color) => user.Add("RowColor",color))
答案 1 :(得分:3)
这样的事情可以解决问题:
var i = 0;
var l = RowColorList.Count;
UserList.ForEach(user => user.Add("RowColor", RowColorList[(i++) % l]));
The % operator将保证&#34;循环&#34;访问RowColorList。