在 C# 中将字符串的交错数组转换为字符串列表

本文关键字:字符串 数组 转换 列表 | 更新日期: 2023-09-27 18:33:48

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

例如。

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

我想将twoDArrOfString转换为listOfListReturned

请建议,怎么做?

问候维韦克

在 C# 中将字符串的交错数组转换为字符串列表

类似以下内容的操作也可以使用:

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>>

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

如果不打算枚举所有这些,则可能需要删除最终ToList,只需针对IEnumerable<List<string>>工作,以避免在不需要时解析所有内部列表(利用枚举的延迟执行)。

你为什么要这样做有什么特别的原因吗?

        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();

没有测试,想象一下它:)

        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]);
        }

一个更 linq 的版本可能是

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]);
}

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