【问题标题】:Convert jagged array of string to list of list of string in C#将锯齿状的字符串数组转换为C#中的字符串列表列表
【发布时间】:2013-10-04 08:17:35
【问题描述】:

我想将string[][] 转换为List<List<string>>。

例如。

List<List<string>> listOfListReturned = new List<List<string>>();
string[][] twoDArrOfString = new string[2][];

我想将twoDArrOfString 转换为listOfListReturned

请指教,怎么做?

问候, 维韦克

【问题讨论】:

标签: c# .net


【解决方案1】:

类似以下的方法也可以:

string[][] twoDArrOfString = new string[2][];

var res = twoDArrOfString
    .Where(inner => inner != null) // Cope with uninitialised inner arrays.
    .Select(inner => inner.ToList()) // Project each inner array to a List<string>
    .ToList(); // Materialise the IEnumerable<List<string>> to List<List<string>>

如果内部数组尚未初始化,则需要处理空值。

如果您不打算列举所有这些,您可能希望删除最终的 ToList 并简单地针对 IEnumerable&lt;List&lt;string&gt;&gt; 来避免在不需要时解析所有内部列表(利用枚举的延迟执行)。

【讨论】:

    【解决方案2】:

    您这样做的具体原因有哪些?

            List<List<string>> listOfListReturned = new List<List<string>>();
            string[][] twoDArrOfString = new string[2][];
    
            twoDArrOfString[0] = new[] {"a", "b"};
            twoDArrOfString[1] = new[] {"c", "d"};
    
            foreach (var s in twoDArrOfString)
            {
                listOfListReturned.Add(new List<string>(s));
            }
    

    或者

            var result = twoDArrOfString.ToList();
            var listOfList = result.Select(x => x.ToList()).ToList();
    

    【讨论】:

      【解决方案3】:

      没有测试,只是想象吧:)

              for (int i = 0; i < twoDArrOfString.Length; i++)
              {
                  for (int j = 0; j < twoDArrOfString[i].Length; j++)
                  {
                      listOfListReturned[i].Add(twoDArrOfString[j].ToString());
                  }
                  listOfListReturned.Add(listOfListReturned[i]);
              }
      

      【讨论】:

        【解决方案4】:

        一个更 linq-ish 的版本可能是

        List<List<string>> listOfListReturned = new List<List<string>>()
            {
                new List<string> {"A", "B"},
                new List<string> {"C", "D"},
            };
        
        string[][] twoDArrOfString = new string[2][]
            {
                new [] {"A", "B"},
                new []{"C", "D"},
            };
        
        var actual = twoDArrOfString.Select(arr => new List<string>(arr)).ToList();
        
        for (var idx = 0; idx < listOfListReturned.Count; idx++) {
            CollectionAssert.AreEqual(listOfListReturned[idx], actual[idx]);
        }
        

        编辑:上面允许空行的亚当解决方案更好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-17
          • 1970-01-01
          • 1970-01-01
          • 2019-07-15
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多