考虑我具有的值的三列如下检测重复的值,高效的数据结构,用于对另一值
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
只是一个说明,原来的问题被标记为java,而不是javascript。虽然如果你把你的答案翻译成Java(这不难),但这当然很有用。 – QuantumMechanic
谢谢。但是每次控制都转到'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
我对面此来了,http://stackoverflow.com/questions/6485186/if - 键式的散列表 - 是 - 一类对象,如何此结果的containsKey工作 – SyncMaster