如何在C#中将维度数组(100,1)转换为2个单独的数组?

时间:2012-09-04 19:17:52

标签: c# arrays

我有一个数组,如果它在视觉上布局包含100行和2列,或(99,1)。我想做的是创建2个一维数组,使得(0-99,0)在1个数组中,而(0-99,1)在另一个数组中。我如何在C#中执行此操作?这是我的代码几乎存在但不完全。

   //Create Arrays A and B for the 2 columns of arrData

        string sourceFilePath = @"c:\data.txt";
        var arrData = File.ReadLines(sourceFilePath).Select(line => line.Split('\t')).ToArray(); 


        string[] arrA = new string[arrData.Length]; 
        string[] arrB = new string[arrData.Length]; 

        long lngCounter;

        for (lngCounter = 0; lngCounter <= arrData.Length; lngCounter++)
        {
            arrA[lngCounter] = arrData[lngCounter,0];
            arrB[lngCounter] = arrData[lngCounter,1];
        }

3 个答案:

答案 0 :(得分:3)

轻松修复:

            for (lngCounter = 0; lngCounter < arrData.Length; lngCounter++)
            {
                arrA[lngCounter] = arrData[lngCounter][0];
                arrB[lngCounter] = arrData[lngCounter][1];
            }

请记住,数组创建的输出不是矩形而是锯齿状数组。你假设是矩形的。

我还要补充一点,只要文本文件中的列少于2列,代码就会中断。所以要注意它。

答案 1 :(得分:1)

作业?

以下是将[至少] 2列的矩形数组拆分为2个1-d数组的一种方法:

private static void Split<T>( T[,] src , out T[] col1 , out T[] col2 )
{
  int  rows = src.GetLength(0) ;

  if ( src.GetLength(1) < 2 ) throw new ArgumentException("src") ;

  col1 = new T[ src.GetLength(0) ] ;
  col2 = new T[ src.GetLength(0) ] ;

  for( int i = 0 ; i < rows ; ++i )
  {
    col1[i] = src[i,0] ;
    col2[i] = src[i,1] ;
  }

  return ;
}

答案 2 :(得分:1)

少了几行,但与接受的答案几乎相同

    string[][] jaggedString = new string[3][];

    jaggedString[0] = new[] {"test", "test1"};
    jaggedString[1] = new[] {"free", "free1"};
    jaggedString[2] = new[] {"done", "done1"};

    var array1 = jaggedString.Select(c => c[0]).ToArray();
    var array2 = jaggedString.Select(c => c[1]).ToArray();

两行:

var array1 = arrData.Select(c => c[0]).ToArray();
var array2 = arrData.Select(c => c[1]).ToArray();