0

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

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:代码很丑

有没有一些简单的方法可以做到这一点?

4

3 回答 3

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不应为空
  • input不应为空
  • 每行应该是相同的大小

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

于 2013-08-04T20:15:45.490 回答
1

你必须创建一个多维数组string[,]吗?因为创建锯齿状数组非常容易,所以string[][]

string[][] newArray = new string[inputArray.Count][];
for (int i = 0; i < inputArray.Count; ++i)
{
    newArray[i] = inputArray[i].Split(',');
}
于 2013-08-04T20:18:22.463 回答
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;
}

这未经测试,但我相信它应该可以工作

于 2013-08-04T20:20:10.367 回答