Board logo

主題: [其他] [求助]二維陣列的排序 [打印本頁]

發表人: Dr.J    時間: 2011-5-28 08:55 AM     主題: [求助]二維陣列的排序

想跟各位大大請教一下
小弟有個二維陣列的資料

種類  幣别   金額
交通  NTD  100
伙食  NTD  200
雜費  RMB  100
住宿  USD  300
伙食  RMB  400
雜費  RMB  200
.
.
種類總共有4種,幣別種共有3種
我要轉成
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                  RMB  200
                                                    USD  300
==========================
上面的資料要把四個項目都分出來,並且每一行的幣別必須一致,不然就新增一行

請問這個有沒有比較好的方法可以處理呢Orz,如果是資料庫的話應該可以用Group by處理,但是這種二維陣列突然一時之間想不到辦法

小的資質愚頓,想請問各位大大有沒有什麼好方法,先謝謝了m(_ _)m

[Dr.J 在  2011-5-28 08:59 AM 作了最後編輯]
發表人: Ralse    時間: 2011-5-28 10:40 AM

我用MySQL居多,所以二維陣列頂多只知道流程

是我的話大概會先把NTD RMB USD三個先用case搭配forloop存成另外三個陣列
然後對每個陣列的種類再做成獨立的陣列
之後從這些獨立的陣列用forloop每三個做一次輸出這樣

第二種方法是先將整個二維陣列針對幣別做泡泡排序
然後記下哪幾個array value是NTD RMB USD三個變換的地方
之後就用for loop搭配case條件去一比一比比較然後整理成想要的表格
最後一口氣輸出這樣

我覺得用mysql很快就能解決的問題,用其他語言真的要寫好多code @@
發表人: Dr.J    時間: 2011-5-28 10:52 AM

對呀,用sql明明就很好做Orz,不過用程式碼來寫我突然想不到啥方法
本來想弄個12個陣列出來的說

程式是要用Java寫的,是不是有什麼集合可以拿來做呢@@?

[Dr.J 在  2011-5-28 10:58 AM 作了最後編輯]
發表人: siva    時間: 2011-5-28 11:26 AM


引用:
Dr.J寫到:
對呀,用sql明明就很好做Orz,不過用程式碼來寫我突然想不到啥方法
本來想弄個12個陣列出來的說

程式是要用Java寫的,是不是有什麼集合可以拿來做呢@@?

[Dr.J 在  2011-5-28 10:58 AM 作了最後編輯]


寫成 java 二維排序大致如下:
(依幣別, 金額排序)

資料陣列.sort(  
   function(x, y){
   return 幣別x == 幣別y ? 金額x - 金額y : 幣別x - 幣別y
  }
);

三維寫法一樣.   
資料陣列.sort(  
   function(x, y){
   return 1維x == 1維y ? (2維x == 2維y ? 3維x - 3維y : 2維x - 2維y ) : 1維x - 1維y
  }
);

要幾維都可以. 一直代進去就 OK 了
發表人: 陽だまり    時間: 2011-5-28 04:02 PM


引用:
Dr.J寫到:
想跟各位大大請教一下
小弟有個二維陣列的資料

種類  幣别   金額
交通  NTD  100
伙食  NTD  200
雜費  RMB  100
住宿  USD  300
伙食  RMB  400
雜費  RMB  200
.
.
種類總共有4種,幣別種共有3種
我要轉成
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                  RMB  200
                                                    USD  300
==========================

不好意思請問一下
為什麼結果要是
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                  RMB  200
                                                    USD  300
==========================

像底下這樣不行嗎
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                                    USD  300
                                  RMB  200
==========================
發表人: Dr.J    時間: 2011-5-28 09:10 PM

這樣也ok的,只要能分開就好了^^

懇請大大似教m(_ _)m


引用:
陽だまり寫到:

引用:
Dr.J寫到:
想跟各位大大請教一下
小弟有個二維陣列的資料

種類  幣别   金額
交通  NTD  100
伙食  NTD  200
雜費  RMB  100
住宿  USD  300
伙食  RMB  400
雜費  RMB  200
.
.
種類總共有4種,幣別種共有3種
我要轉成
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                  RMB  200
                                                    USD  300
==========================

不好意思請問一下
為什麼結果要是
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                  RMB  200
                                                    USD  300
==========================

像底下這樣不行嗎
=========================
交通  金額   伙食   金額  雜費   金額   住宿   金額
NTD  100   NTD  200
                 RMB  400  RMB  100
                                                    USD  300
                                  RMB  200
==========================

發表人: Dr.J    時間: 2011-5-28 11:28 PM

大大,請問一下,如果我要照種類跟幣別分類的話?  金額可以不用理他Orz
最主要是要種類跟幣別分開@@



引用:
siva寫到:

引用:
Dr.J寫到:
對呀,用sql明明就很好做Orz,不過用程式碼來寫我突然想不到啥方法
本來想弄個12個陣列出來的說

程式是要用Java寫的,是不是有什麼集合可以拿來做呢@@?

[Dr.J 在  2011-5-28 10:58 AM 作了最後編輯]


寫成 java 二維排序大致如下:
(依幣別, 金額排序)

資料陣列.sort(  
   function(x, y){
   return 幣別x == 幣別y ? 金額x - 金額y : 幣別x - 幣別y
  }
);

三維寫法一樣.   
資料陣列.sort(  
   function(x, y){
   return 1維x == 1維y ? (2維x == 2維y ? 3維x - 3維y : 2維x - 2維y ) : 1維x - 1維y
  }
);

要幾維都可以. 一直代進去就 OK 了

發表人: siva    時間: 2011-5-28 11:39 PM


引用:
Dr.J寫到:
大大,請問一下,如果我要照種類跟幣別分類的話?  金額可以不用理他Orz
最主要是要種類跟幣別分開@@





上面寫了呀? . 用三維排序就 OK 了呀...

var 資料陣列[ 總項數 ]  = new Array(2);

ArrayData[ 0 ][0]  =  "交通 ";
ArrayData[ 0 ][1]  =  "NTD ";
ArrayData[ 0 ][2]  =  100;
.....
....
....


// 三維排序 ( 種類  幣别   金額 )
ArrayData.sort(  
   function(x, y){
   return x[0] == y[0] ? (x[1] == y[1] ? x[1] - y[1] : x[2] - y[2] ) : x[0] - y[0]
  }
);

很久沒寫 java 了. 忘了字串可不可以直接減法比較. 不行就自己改成字串比較式.

不要金額的話. 就自己代入前面寫二維排序就好了
發表人: Dr.J    時間: 2011-5-30 08:39 PM

感謝各位的回覆,不過還是沒有辦法比較有效的把他整個拆出來,只好放棄了Orz




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0