.net 将字符串消息拆分为二维数组

yacmzcpb  于 2023-01-18  发布在  .NET
关注(0)|答案(5)|浏览(155)

我有一个消息来包含48个不同的值分离为:
String values = "4774,55567,44477|14555,4447,5687|416644,4447,5623|...";
我需要将其转换为16乘3数组,如下所示:
String[,] vals = {{"4774,55567,44477"},{14555,4447,5687},{416644,4447,5623}...}
我尝试使用split()函数,但无法确定如何将其输入矩阵

e4yzc0pl

e4yzc0pl1#

您可以将其拆分两次:

var values = "4774,55567,44477|14555,4447,5687|416644,4447,5623";
var rows = values.Split('|');
var matrix = new string[rows.Length][];
for (var i = 0; i < rows.Length; i++)
{
    matrix[i] = rows[i].Split(',');
}

还有一个使用LINQ的更优雅的解决方案:

var values = "4774,55567,44477|14555,4447,5687|416644,4447,5623";
var data = values
    .Split('|')
    .Select(r => r.Split(','))
    .ToArray();

编辑:正如@RandRandom所指出的,上面的解决方案创建了一个锯齿状数组。下面解释一下不同之处:link。如果你不想使用交错数组,那么你需要创建一个matrix数组,指定[rows.Length, rows[0].Split(',').Length]的维度,并在两个for循环的帮助下赋值:

string values = "4774,55567,44477|14555,4447,5687|416644,4447,5623";
string[] rows = values.Split('|');
string[,] matrix = new string[rows.Length, rows[0].Split(',').Length];
for (int i = 0; i < rows.Length; i++)
{
    string[] rowColumns = rows[i].Split(',');
    for (int j = 0; j < rowColumns.Length; j++)
    {
        matrix[i, j] = rowColumns[j];
    }
}
r3i60tvu

r3i60tvu2#

可以使用split the string based on the | character,然后使用linq.Select(),基于,拆分每行并创建一个二维数组

string[] temp = values.Split('|');
var res=temp.Select(x => x.Split(',')).ToArray();
ogq8wdun

ogq8wdun3#

如果可以考虑使用锯齿数组而不是2D数组,请使用Linq:

var values = "4774,55567,44477|14555,4447,5687|416644,4447,5623";
var result = values
   .Split('|')
   .Select(x => x.Split(','))
   .ToArray();
nx7onnlm

nx7onnlm4#

可以使用String.Split()方法将字符串拆分为子字符串数组,然后使用嵌套循环循环遍历该数组并将值添加到二维数组中。
下面是一个例子:

string values = "4774,55567,44477|14555,4447,5687|416644,4447,5623|...";
string[] substrings = values.Split('|');
string[,] vals = new string[substrings.Length,3];
for (int i = 0; i < substrings.Length; i++)
{
    string[] subvalues = substrings[i].Split(',');
    for (int j = 0; j < subvalues.Length; j++)
    {
        vals[i, j] = subvalues[j];
    }
}

这将按分隔符'拆分字符串值|'并创建一个子字符串数组。然后,它将遍历每个子字符串,并再次用','拆分它,然后将结果存储在一个16行3列的2D数组vals中。

kyvafyod

kyvafyod5#

尝试以下操作:

string values = "4774,55567,44477|14555,4447,5687|416644,4447,5623";
            String[][] vals = values.Split(new char[] { '|' }).Select(x => x.Split(new char[] { ',' }).ToArray()).ToArray();

            string[,] vals2 = new string[vals.GetLength(0), vals[0].Length];
            for(int i = 0; i < vals.GetLength(0); i++)
            {
                for(int j = 0; j < vals.Length; j++)
                {
                    vals2[i, j] = vals[i][j];
                }
            }

相关问题