1

我有一个 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 count - 2 ghost 15.txt count - 1

我不确定 map 是否有帮助/我需要再次使用列表/编写函数来执行此操作?谢谢!

我用简单的条件语句解决了上述问题!谢谢@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++;
                    }
4

1 回答 1

1

我认为您可能使这比需要的更复杂。我建议你从电脑上退后一步。首先,您应该举一个简单的输入示例,并手动计算输出应该是什么。接下来,写几句话(用你的母语)描述你为计算出这个输出所采取的步骤。从那里开始,您需要完善您的描述,直到您可以轻松地将其翻译成 Java。

于 2012-10-16T15:54:35.973 回答