首页 > 解决方案 > 将用逗号分隔的字符串 [] 数组解析为二维数组 C#

问题描述

我在 C# 中有一个长度为 3 的大型数组,其中填充了字符串:

字符串:

myArray[0,0] 包含:“1,11,2,18,4”

myArray[0,1] 包含:“2,21,12,138,14”

myArray[0,2] 包含:“1,131,21,138,24”

我想通过这个字符串数组(所以0,0到0,2。或者如果我有一百万,[0,0]到[0,999999]),用逗号分割数字,基本上生成这个:

var a = new int [,] { {1 , 11, 2, 18, 4 }, {2, 21, 12, 138, 14}, {1, 131, 21, 138, 24 } };

标签: c#multithreadingparsing

解决方案


这个问题用 LINQ 不容易解决,因为输出必须是二维数组。因此,我正在使用良好的旧循环。我还使用一维字符串数组作为输入。为了使代码正常工作,所有行必须包含相同数量的整数(在SubArrayLength此处给出):

const int SubArrayLength = 5;

string[] myArray = { "1,11,2,18,4", "2,21,12,138,14", "1,131,21,138,24" };

var a = new int[myArray.Length, SubArrayLength];
for (int i = 0; i < myArray.Length; i++) {
    var numbers = myArray[i].Split(',');
    for (int j = 0; j < SubArrayLength; j++) {
        a[i, j] = Int32.Parse(numbers[j]);
    }
}

如果你有一个锯齿状数组(即数组的数组)而不是多维数组不是问题,你可以使用这个 LINQ 代码:

string[] myArray = { "1,11,2,18,4", "2,21,12,138,14", "1,131,21,138,24" };

var a = myArray
    .Select(s => s.Split(',').Select(n => Int32.Parse(n)).ToArray())
    .ToArray();

在这第二个示例a中是 typeint[][]而不是int[,]. 嵌套数组的长度可以不同。


推荐阅读