2011-11-30 77 views
1

考慮我具有的值的三列如下檢測重複的值,高效的數據結構,用於對另一值

Col-A   Col-B   Values 
1    2    9 
3    4    9 
5    6    9 
1    2    8 
5    6    8 
3    4    7 
1    2    7 
5    6    10 
1    2    10 
1    3    10 
1    4    10 

因此,在上面的一組值,(1,2) -B)具有所有的值(即9,8,7和10),而其他的則如3,4; 5,6沒有所有的價值。我只想獲得(1,2)以上數據。

我想過使用哈希表來嘗試它,將(ColA,ColB)添加到一個單獨的對象,並使用一個Hashtable,其關鍵是對象和值是列'值'。即

Class K 
{ 
    int a; 
    int b; 
} 

Hashtable<K,int> numbers = new Hashtable<K,int>(); 

將每一行添加到散列表,並且當發現重複鍵時,增加計數。最後檢查計數是否等於「值」列中不同值的數量。

但我無法弄清楚如何迭代值的每個值,即9,8,7,10。有一個更好的方法嗎。

[編輯]在Java中實現dasblinkenlight的方法後:

ArrayList<Double> list; 
Hashtable<K,ArrayList<Double>> numbers = new Hashtable<K,ArrayList<Double>>(); 

while((line = brMyHashval.readLine()) != null) 
{ 
    if(!(line.isEmpty())) 
    { 
     String[] temp; 
     temp = line.split(" ");  
     eDouble = Double.parseDouble(temp[5].toString());     
     Val key = new Val(Double.parseDouble(temp[0].toString()) ,Double.parseDouble(temp[1].toString())); 

     if(!(numbers.containsKey(key))) 
     { 
      list = new ArrayList<Double>(); 
      numbers.put(key, list); 

     } 
     else 
     { 
      list = numbers.get(key); 
     } 
     list.add(eDouble); 
    } 
} 

但控制而來的 '如果' 循環每次。即使密鑰是相同的,它也不會進入其他部分。在Java中,id與每個關鍵字相關聯。那麼它會檢查對象'key'中的id或值。

迭代1:鍵(id = 52)X = 1,Y = 2

迭代2:鍵(id = 53)X = 3,Y = 4

迭代3:鍵(id = 55)X = 5,Y = 6

迭代4:鍵(id = 56)X = 1,Y = 2

回答

3

相反int的,需要存儲的值的列表:Hashtable<K,List<int>>添加值,而不是遞增計數,如下所示:

var key = new K(a,b); 
List<int> list; 
if (!hashtable.ContainsKey(key)) { 
    list = new List<int>(); 
    hashtable.Add(key, list); 
} else { 
    list = hashtable[key]; 
} 
list.Add(value); 
+0

只是一個說明,原來的問題被標記爲java,而不是javascript。雖然如果你把你的答案翻譯成Java(這不難),但這當然很有用。 – QuantumMechanic

+0

謝謝。但是每次控制都轉到'if'循環。即使密鑰是相同的,它也不會進入其他部分。在Java中,id與每個關鍵字相關聯。那麼它會檢查對象'key'中的id或值。 迭代1: 鍵(id = 52) X = 1,Y = 2 迭代2: 鍵(id = 53) X = 3,Y = 4 迭代3: 鍵(id = 55) X = 5,Y = 6 迭代4: 鍵(id = 56) X = 1,Y = 2 – SyncMaster

+0

我對面此來了,http://stackoverflow.com/questions/6485186/if - 鍵式的散列表 - 是 - 一類對象,如何此結果的containsKey工作 – SyncMaster