Re: [問題] 請問二維陣列
※ 引述《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)
推
02/09 12:09, , 1F
02/09 12:09, 1F
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章