作者minhong (minhong)
站内C_Sharp
标题Re: [问题] 请问二维阵列
时间Fri Feb 9 11:29:06 2007
※ 引述《wanwan2 (La New顽张っで)》之铭言:
: 大家好~ 我是C#的新手
你好,我也是新手 :p
原本查一下 MSDN 想看一下 Array 有没有什麽 method 可以从一个
二维阵列,扔回一份一维阵列
当然查到的资料不乏有 Copy 之类的 method,但毕竟还是要做到复制的动作
成本上就差了些
: 我的A function的传回值是一个 double[,] 的二维阵列
: 我的B function的参数是double[] 的一维阵列
: 我原本想说跑个for loop把二维阵列依序丢给B function就行了
: double[,] data = A();
: for (int i=0; i < data.GetLength(0); i++)
: B(data[i]); // 错误~ 好像二维没办法直接取出一维??
你会这样使用,让我想为你补充一件事 (书上刚好有看到)
在二(多)维阵列上,C# 有分 rectangular 和 jagged 两种
以一个二维阵列来说,对 C/C++ programmer 来说是以这样 data[i][j] 取值
C# 不是没有这种取法,但这种取法是对 jagged array 的取法
(注:jagged array 就是可以有 { {1,2}, {3,4,5,6} } ; 不同长度的阵列 )
: 现在为了解决这个问题.. 我只能先把二维copy到一维的阵列 才能丢给B function了
: double[,] data = A();
: double[] buf = new double[data.GetLength(1)];
: for (int i=0; i < data.GetLength(0); i++)
: {
: for (int j=0; j < data.GetLength(1); j++)
: buf[j] = data[i,j];
: B(buf);
: for (int j=0; j < data.GetLength(1); j++)
: data[i,j] = buf[j];
: }
: 请问各位~ 有什麽解决的方法吗? ^^"
: 要不然这样的做法蛮没有效率的~ (我的二维阵列会到 [32,32768] orz)
: ^_^
改良你的部分,我省去了复制的动作,但大致上是差不多的
解法就是直接把 二维阵列 扔过去,多加一个参数指明现在处理的是那个 dimension
class Program
{
static void Main(string[] args)
{
int[,] twoArray = A() ;
for ( int i = 0 ; i < twoArray.GetLength(0) ; i++ )
Print(twoArray, i);
}
private static void Print(int[,] array, int dimension)
{
for ( int i = 0 ; i < array.GetLength(1) ; i++ )
Console.WriteLine(array[dimension, i]) ;
}
}
---
不过,我还是期望有一个可以达到原 po B(data[i]) 的作法 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.140.178.155
※ 编辑: minhong 来自: 220.140.178.155 (02/09 11:29)
1F:推 euleramon:应该只能降...原po的写法是以前C++的写法,用到指标 02/09 12:09