从单维数组创建多维数组

时间:2013-08-04 20:10:57

标签: c# arrays parsing

好的,所以我有这个字符串数组看起来像这样:

myArray[0] = "a0,b0,c0,d0"
myArray[1] = "a1,b1,c1,d1"
myArray[2] = "a2,b2,c2,d2"
myArray[3] = "a3,b3,c3,d3"
etc...

我想创建一个多维数组,使用每个元素的第一部分作为“键”。简而言之:

myMultiArray:
x/y|  0   |  1   |  2   |  3   |
------------------------
 0 | "a0" | "a1" | "a2" | "a3" |
 1 | "b0" | "b1" | "b2" | "b3" |
 2 | "c0" | "c1" | "c2" | "c3" |
 3 | "d0" | "d1" | "d2" | "d3" |

这就是我所拥有的:

 private String[,] resultsParser(String[] inputArray)
    {
        String[] splittedString = null;
        String[,] outputString = null;
        for (int i = 0; i < inputArray.Length; i++ )
        {
            splitString = inputArray[i].Split(',');
            for (int j = 0; j < outputArray.GetLength(0); j++)
            {
                if (splitString[0] == outputArray[j, 0])
                {
                    for (int k = 1; k < splitString.Length; k++)
                    {
                        outputArray[j, k] = splitString[k];
                    }
                }
            }
            for (int k = 0; k < splitString.Length; k++)
            {
                outputArray[outputArray.GetLength(0), k] = splitString[k];
            }
        }
        return outputArray;
    }
  • 问题1:它不起作用
  • 问题2:代码很难看

有一些简单的方法吗?

3 个答案:

答案 0 :(得分:5)

在我看来,你需要把它分成两个阶段:

  • 确定尺寸
  • 拆分每一行并复制结果

其中每个都相当简单,但如果将它们分开,您会发现代码更简单。类似的东西:

public static string[,] SplitResults(string[] input)
{
    int columns = input[0].Split(',').Length;
    string[,] output = new string[input.Length, columns];

    for (int row = 0; row < input.Length; row++)
    {
        string[] split = input[row].Split(',');
        for (int column = 0; column < columns; column++)
        {
            output[row, column] = split[column];
        }
    }
    return output;
}

但是,您应该添加验证:

  • input不应为null
  • input不应为空
  • 每行应该是相同的大小

请注意,上面的代码将第一行拆分两次(一次查找大小,一次填充数据)。虽然你可以修复它以提高效率,但它会使代码更难看 - 我不会这样做,除非你真的发现它是一个瓶颈。

答案 1 :(得分:1)

您是否必须创建多维数组string[,]?因为创建锯齿状数组非常容易,string[][]

string[][] newArray = new string[inputArray.Count][];
for (int i = 0; i < inputArray.Count; ++i)
{
    newArray[i] = inputArray[i].Split(',');
}

答案 2 :(得分:0)

private String[,] resultsParser(params String[] input){
    String[,] array = new String[input.Length, input[0].length];//x is the total elements, y is the elements in each array
    for ( int i = 0 ; i < input.Length ; i++ ){
        array[i] = input[i];
    }
    return array;
}

这未经过测试,但我相信它应该可行