无休止地重复列表(使用无限重复序列压缩有限列表)

Ale*_*der 4 c# linq

UserList 是一个词典列表,如:

[
  {Name:"Alex",Age:25},
  {Name:"Peter",Age:35},
  {Name:"Muhammad",Age:28},
  {Name:"Raul",Age:29}
]
Run Code Online (Sandbox Code Playgroud)

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}
]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码:

UserList.Zip(RowColorList,(user,color) => user.Add("RowColor",color))
Run Code Online (Sandbox Code Playgroud)

使用此代码,new UserList将只包含任意数量的条目RowColorList.RowColorList每当可用的颜色用完时,我希望他从头开始.怎么样?

Stu*_*tLC 7

你可以创建一个函数来返回无限的可枚举Color/ string(或者不管RowColor是什么类型)

public IEnumerable<Color> InfiniteColors()
{
    while (true)
    {   
        foreach (var color in RowColors)
        {
            yield return color;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,这可以与任何Linq yield return扩展方法一起使用,例如IEnumerable.

UserList.Zip(InfiniteColors(),(user,color) => user.Add("RowColor",color))
Run Code Online (Sandbox Code Playgroud)