台灣最大程式設計社群網站
線上人數
1064
 
會員總數:245985
討論主題:189565
歡迎您免費加入會員
討論區列表 >> Java >> 如何在不同陣列搜集相同值
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何在不同陣列搜集相同值
價值 : 10 QP  點閱數:862 回應數:2
樓主

David
門外漢
0 8
109 17
發送站內信

假設有[1,2] [3,4] [2,5] [6,7]
我想要將相同的值做Group
如:[1,2,5] [3,4] [6,7]
請問如何用java來呈現呢?
亟需要解答..感謝了

本篇文章發表於2014-06-12 00:07
1樓
最有價值解答

Raymond
檢舉此回應
因為你沒有提供程式, 所以這裡只給你概念...

假定 [1, 2], [3, 4] 等等是原組, 用一個 map<Integer, Integer> 來存放資料跟原組的 index. 組裡的資料做 map 的 key, 組的 index 做 map 的 value.

在存放前進 map 前, 先搜尋每一組的資料是否已在 map 裡, 如果原組裡所有的資料都不在 map 裡, 那就根據組的 index 來存放資料.

比方說存放 [1,2] 時, map 是空的, 沒有資料, 所以就存放 {1, 0}, 跟 {2, 0}, 1 跟 2 是這一組的資料, 0 是 [1,2] 的 index. 用 map 的 put() method: put(原組資料, 原組 index).

存放第 2 組資料 [3,4] 時, 用 3 跟 4 去 map 內搜尋, 用 map 的 get() method. 因為 map 這時只有 {1, 0} 跟 {2, 0}, 所以 get(3) 跟 get(4) 都會傳回 null. 那就用原組的 index 來做 3 跟 4 的 value.

map 這時應該有 {1, 0}, {2, 0}, {3, 1}, {4, 1}.

存放第 3 組資料 [2,5] 時, 同樣先去搜尋, 用 2 來搜尋會得到 0, 用 5 來搜尋會得到 null. 只要任一個搜尋不是 null, 就用搜尋到的 value 來做為這一組的 index. 所以要存放的是 {2, 0}, {5, 0}.

這時 map 內的資料是: {1, 0}, {2, 0}, {3, 1}, {4, 1}, {2, 0}, {5, 0}.

最後一組 [6,7]. 搜尋 6, 7 都會得到 null, 這時就用 [6,7] 的 index 來存放: {6, 3}, {7, 3}.

最後 map 內的資料為: {1, 0}, {2, 0}, {3, 1}, {4, 1}, {2, 0}, {5, 0}, {6, 3}, {7, 3}.

有一個問題: 如果原組裡的資料同時出現在其它組裡, 要怎麼處理?
比方說你的原組資料是: [1,2], [3,4], [2,3], [6,7]. [2,3] 要怎麼分組?

無論如何, 當你所有的資料都處理完畢後, 接下來是要把 map 的資料重組. 其中一個方法是用另一個 map<Integer, set<Integer>> 來處理重組的工作. 這 map 的 key 用來存放上個 map 的 value, set<Integer> 放上個 map 的 key. 這是類似 multimap 的架構. 重組後的資料應該是:
{0, [1, 2, 5]}, {1, [3, 4]}, {3, [6, 7]}.

本篇文章回覆於2014-06-12 21:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

David
檢舉此回應
真的太感謝您了,解說很詳細,我再試看看,感謝。
本篇文章回覆於2014-06-12 22:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.