Re: [問題] 請問二維陣列

看板C_Sharp (C#)作者 (minhong)時間18年前 (2007/02/09 11:29), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
應該只能降...原po的寫法是以前C++的寫法,用到指標
02/09 12:09, 1F
文章代碼(AID): #15o-g3rj (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #15o-g3rj (C_Sharp)