我有兩個由字符串組成的並行java數組。在第一個我有一些重複值在第二個數組中有多個匹配。我試圖收集重複的值並將它們存儲在一組字符串中,我也想收集一組字符串中的匹配值。什麼我想要做的例子是這樣的:比較Java數組
apple 1
orange 2
apple 3
orange 4
nuts 5
我想他們是這樣的:
[apple] [1,3]
[orange] [2,4]
[nuts] [5]
任何想法,我該怎麼辦呢?
我有兩個由字符串組成的並行java數組。在第一個我有一些重複值在第二個數組中有多個匹配。我試圖收集重複的值並將它們存儲在一組字符串中,我也想收集一組字符串中的匹配值。什麼我想要做的例子是這樣的:比較Java數組
apple 1
orange 2
apple 3
orange 4
nuts 5
我想他們是這樣的:
[apple] [1,3]
[orange] [2,4]
[nuts] [5]
任何想法,我該怎麼辦呢?
您應該改用Map<String, List<Integer>>
。只需迭代兩個數組,然後將值作爲鍵值對添加。
在每次添加之前,使用Map#containsKey(Object)
方法檢查密鑰是否已經存在。如果已經存在,則使用Map#get(Object)
方法獲取與該密鑰對應的List
,然後使用List#add(E)
方法在列表中添加新元素。
使用Map<String,List<Integer>>
,遍歷int[]
並從索引中獲取String[]
數組的值並繼續填充Map
。
Map
的鍵應該是String[]
中的值,值將是List<Integer>
。檢查Map
中是否存在密鑰,如果存在,則將該整數值添加到List<Integer>
或者創建一個條目,並將該String作爲關鍵字,並創建一個包含該整數值的新List。
的SSCCE是:
String[] keys = {"apple","orange","apple","orange","nuts"};
int[] values = {1,2,3,4,5};
Map<String, List<Integer>> map = new HashMap<String,List<Integer>>();
for(int i=0;i<values.length;i++) {
int value = values[i];
String key = keys[i];
if(map.containsKey(key)){
map.get(key).add(value);
}
else {
List<Integer> list = new ArrayList<>();
list.add(value);
map.put(key, list);
}
}
以下是你需要(在僞代碼)的邏輯:
map := new Map<String, Set<Integer>>
for each i in array do
key := array[i][0]
value := array[i][1]
if map not contains key then
map.add(key, new Set<Integer>)
endif
map.get(key).add(value)
endfor
java.util.Map是你的朋友。 –
@kocko - 更具體地說'Map>'(或者使用'Set'而不是'List'來除掉dups)。 –
tjameson
作爲一個便箋,向我們展示您所做的一切總是一個好主意。一般來說,圍繞您的代碼獲取答案將有助於您更好地理解解決方案。 –