我有一个Tuple类,它有:
private class Tuple {
private int fileno;
private int position;
public Tuple(int fileno, int position) {
this.fileno = fileno;
this.position = position;
}
}
我也有一个反映这个列表的散列图,如
Map<String, List<Tuple>> index = new HashMap<String, List<Tuple>>();
现在有一种情况我需要计算文件中的单词数量:数据如下:
abc 10.txt
abc 10.txt
abc 10.txt
abc 12.txt
abc 12.txt
ghost 15.txt
and so on....
现在如何计算上述次数?它很简单,但我已经编写了这么长时间,也是java的新手。 我也学过重复不能进入hashmap!感谢。
将数据添加到列表中:
List<Tuple> idx = index.get(word);
if (idx == null) {
idx = new LinkedList<Tuple>();
index.put(word, idx);
}
idx.add(new Tuple(fileno, pos));
上面的代码只是转储数据,现在我将与字符串数组[]中的单词进行比较。 我最后需要的就像这样: abc 10.txt count - 3 abc 12.txt计数 - 2 ghost 15.txt count - 1
我不确定地图是否有帮助/我需要再次使用列表/编写一个函数来执行此操作?谢谢!
我用简单的条件语句解决了上述问题!谢谢@codeguru
/*
consider all cases and update wc as along
Lesson learnt - Map does not handle duplicates
- List does not work
- spend half a day figuring out
*/
if(wordInstance == null && fileNameInstance == null) {
wordInstance = wordOccurence;
fileNameInstance = files.get(t.fileno);
}
if(wordInstance == wordOccurence && fileNameInstance ==files.get(t.fileno)) {
wc++;
}
if(wordInstance == wordOccurence && fileNameInstance !=files.get(t.fileno)) {
wc=0;
fileNameInstance = files.get(t.fileno);
wc++;
}
if(wordInstance != wordOccurence && fileNameInstance ==files.get(t.fileno)) {
wc=0;
wordInstance = wordOccurence;
wc++;
}
答案 0 :(得分:1)
我认为你可能会让它变得比它需要的更复杂。我建议你从电脑上退后一步。首先,您应该采用一个简单的输入示例,然后手动确定输出应该是什么。接下来,写一些句子(用您的母语)描述您为完成此输出所采取的步骤。从那里,您需要优化您的描述,直到您可以轻松地将其转换为Java。