如何将多个列表与自定义序列组合

atp*_*p03 5 c# algorithm list

不确定是否有算法来描述这个问题但是有没有优雅的方法来组合自定义序列中的列表.例如:

List<string> list1 = new List<string>();
List<string> list2 = new List<string>();
List<string> list3 = new List<string>();

list1.Add("a");
list1.Add("b");
list1.Add("c");

list2.Add("d");
list2.Add("e");
list2.Add("f");

list3.Add("g");
list3.Add("h");
list3.Add("i");

List<string> combined = new List<string>();
Run Code Online (Sandbox Code Playgroud)

我希望组合的内容包含如下序列:

a //First record in list1
d //First record in list2
g //First record in list3
b //Second record in list1
e //Second record in list2
h //Second record in list3
c //Third record in list1 
f //Third record in list2 
i //Third record in list3 
Run Code Online (Sandbox Code Playgroud)

每个列表中的记录数可能不相等.

编辑

当每个列表中的记录数可能不相等时,我的意思是:

List<string> list1 = new List<string>();
List<string> list2 = new List<string>();
List<string> list3 = new List<string>();

list1.Add("a");

list2.Add("b");
list2.Add("c");

list3.Add("d");
list3.Add("e");
list3.Add("f");

List<string> combined = new List<string>();
Run Code Online (Sandbox Code Playgroud)

预期成绩:

a //First record in list1
b //First record in list2
d //First record in list3
c //Second record in list2
e //Second record in list3
f //Third record in list3
Run Code Online (Sandbox Code Playgroud)

Tim*_*ers 4

不知道有没有名字。合并?拼接?但代码很简单。

var lists = new [] { list1, list2, list3 };
var combined = new List<string>(lists.Sum(l => l.Count));    

for (var i = 0; i < lists.Max(l => l.Count); i++)
{
   foreach (var list in lists)
   { 
      if (i < list.Count)
          combined.Add (list[i])
   }
}
Run Code Online (Sandbox Code Playgroud)