我有一个数组,如果它在视觉上布局包含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];
}
答案 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();