2012-02-05 23 views
0

我想整天来计算这个问题,似乎我无法弄清楚如何做到这一点:硬Java数组的情况

List<ArrayList<Word>> words = new ArrayList<ArrayList<Word>>(); 
  • 词索引0有:defin 3,countri 1董事长2,1年,
  • 字索引1具有:defin 2,建立1,countri 1,第3轮
  • 词索引2具有:杯3,专利1项,第2轮,第2年,

我想要什么做的是找出哪些单词属于其他数组,并将它们的数字加在一起,然后将其与第一次出现分开。

例如:

  • 当索引= 0和字= defin - > 3/2 + 0
  • 当索引= 0和字= countri - > 1/{1+ 0
  • ....
  • 当索引= 1和字= defin - >三分之二+ 0
  • 当索引= 1和字= ROUND - > 3/2 + 0
  • ....
  • 当index = 2且word = cup - > 3/0 + 0时,但必须做3/1,因此它不会“break”。
+1

你的例子不清楚。 “当索引= 0和词=定义 - > 3/2 + 0”我想我明白3从哪里来,但为什么用2除?为什么你总是加0? – yurib 2012-02-05 23:08:24

+1

如果我这样做,我会让我的数据结构'ArrayList > words = new ArrayList >();' 即您的每个列表将改为映射'杯子:1,定义:3',并且这将更容易找到这样的单词,而不必进行字符串操作。 – Neeta 2012-02-05 23:11:44

+0

我除以2,因为在第二个数组中,即当索引是1时defin是2 ans在第三个是0。那就是0s来了 – 2012-02-05 23:11:55

回答

0

我想出了如何做到这一点,而不是效率方面的最佳方式,但它的工作原理。无论如何,它不是后来的效率,而是使其“只是工作”。

所以我做的是我循环第一个数组的大小,并检查单词是否属于任何数组或不。当我发现我存储它的频率值。然后我再次检查数组,除非我已经找到第一个字。我总结了所有的频率,最后我跳出了第一个频率,但总结了其他频率。

1

我很想建议Guava'sMultiset,这通常是用来跟踪同一对象的多个实例 - 就像一个Map<E, Integer>,但很多少些麻烦。

List<Multiset<String>> words; 
int index; 

Map<String, Double> ratios = Maps.newHashMap(); 
for(Multiset.Entry<String> entry : words.get(index).entrySet()) { 
    String word = entry.getElement(); 
    int wordCountIn0 = words.get(0).count(word); 
    if (wordCountIn0 == 0) wordCountIn0 = 1; 
    ratios.put(word, (double) entry.getCount()/wordCountIn0); 
} 

我不是100%清楚你的问题,但尽我所知,这应该工作。

+0

嗯,我真的不明白这个如何设置单词和每个单词的频率。你能解释一下吗?谢谢 – 2012-02-06 10:23:18

+0

如果你正在浏览一个文档并添加一个单词,只需使用'multiset.add(word)'添加一个'word'。如果您想要将计数设置为精确值,请使用'multiset.setCount(word,count)'。 – 2012-02-06 17:04:20

+1

Multiset Javadoc位于http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Multiset.html,可能有所帮助。 – 2012-02-06 17:13:30

0

将数据封装在维护各种数据存储中所有相关数据的类中。

然后通过该对象进行查询。把它看作是一个数据库 - 你有核心数据,但是你也有类似索引和视图的东西,根据你的使用需求以给定的方式呈现这些数据。

+0

我已经有一个类的词,其中包含字的字符串以及频率。我的数组列表是索引,所以我认为没有多少意义可以封装,或者它是? – 2012-02-07 16:29:58

相关问题