【问题标题】:Combine multiple lists vertically into a single string list [duplicate]将多个列表垂直组合成一个字符串列表[重复]
【发布时间】:2017-04-18 08:14:36
【问题描述】:

我有以下字符串列表

List<string> List1 = new List<string> { "P1", "P2", "P3" };
List<string> List2 = new List<string> { "Q1", "Q2", "Q3" };
List<string> List3 = new List<string> { "R1", "R2", "R3" };

//........
// Add List1,List2, List3 values Vertically  to CombileList

CombineList = { "P1", "Q1", "R1", "P2", "Q2", "R2", "P3", "Q3", "R3" };

我想将所有列表的值垂直添加到CombineList,如CombineList所示,可以有n个列表以相同的方式添加到CombineList。

【问题讨论】:

标签: c#


【解决方案1】:

如果列表大小相同,您可以使用 for 循环:

List<string> list1 = new List<string> { "P1", "P2", "P3" };
List<string> list2 = new List<string> { "Q1", "Q2", "Q3" };
List<string> list3 = new List<string> { "R1", "R2", "R3" };

List<string> combinedList = new List<string>();

for(int i = 0; i < list1.Count; i++)
{
    combinedList.Add(list1[i]);
    combinedList.Add(list2[i]);
    combinedList.Add(list3[i]);
}

【讨论】:

    【解决方案2】:

    Here提出了类似的问题

    使用IEnumeratorMoveNext() 方法,您可以遍历数组并按照您的喜好组合它们

    【讨论】:

      【解决方案3】:

      通过使用枚举器:

      public List<T> CombineVertically<T>(List<List<T>> Source)
              {
                  List<T> result = new List<T>();
      
                  var enumerators = Source.Select(x => x.GetEnumerator());
                  while (enumerators.Where(x => x.MoveNext()).Count() > 0)            
                      result.AddRange(enumerators.Select(x => x.Current));
      
                  enumerators.ToList()
                      .ForEach(x => x.Dispose());
      
                  return result;
              }
      

      【讨论】:

      • IEnumerator&lt;T&gt; 实现IDisposable,不要忘记Dispose 所有实例
      • @DmitryBychenko 你完全正确
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多