2012-02-05 47 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

相關問題