我想将string[][]
转换为List<List<string>>
。
例如
List<List<string>> listOfListReturned = new List<List<string>>();
string[][] twoDArrOfString = new string[2][];
我想将twoDArrOfString
转换为listOfListReturned
请建议,怎么办?
此致 的Vivek
答案 0 :(得分:5)
以下内容也适用:
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<List<string>>
起作用,以避免在不需要时解析所有内部列表(利用延迟执行的枚举)。
答案 1 :(得分:1)
特别是为什么你这样做?
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();
答案 2 :(得分:0)
未经测试只是想象它:)
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]);
}
答案 3 :(得分:0)
更多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]);
}
编辑:亚当的解决方案允许空行更好。