1

我有一个数组,如果它在视觉上由 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];
        }
4

3 回答 3

3

轻松修复:

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

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

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

于 2012-09-04T19:52:44.323 回答
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 ;
}
于 2012-09-04T19:48:30.020 回答
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();
于 2012-09-04T19:59:23.370 回答