Сложная ситуация с массивом Java - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь вычислить эту проблему в течение всего дня и, похоже, не могу понять, как это сделать:

List<ArrayList<Word>> words = new ArrayList<ArrayList<Word>>();
  • слов индекс 0 имеет: определение 3, число 1, председатель 2, год 1,
  • слов индекс 1 имеет: определение 2, сборка 1, количество 1, раунд 3
  • слов индекс 2 имеет: кубок 3, патент 1, раунд 2, год 2,

То, что я хочу сделать, - это найти, какие слова принадлежат другим массивам и сложить их числа вместе, а затем разделить это с первым появлением.

Например:

  • Когда индекс = 0 и слово = определено -> 3/2 + 0
  • Когда индекс = 0 и слово = countri -> 1/1 + 0
  • ....
  • Когда индекс = 1 и слово = определено -> 2/3 + 0
  • Когда индекс = 1 и слово = раунд -> 3/2 + 0
  • ....
  • Когда index = 2 и word = cup -> 3/0 + 0, но должны делать 3/1, чтобы он не "сломался".

Ответы [ 3 ]

1 голос
/ 06 февраля 2012

Я испытываю желание предложить Guava's Multiset , который обычно используется для отслеживания нескольких вхождений одних и тех же объектов - например, 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 голосов
/ 07 февраля 2012

Инкапсулируйте ваши данные в классе, который поддерживает все необходимые данные в различных хранилищах данных.

Затем запросите этот объект. Думайте об этом как о базе данных - у вас есть основные данные, но у вас также есть такие вещи, как индексы и представления, которые представляют эти данные определенным образом в соответствии с вашими требованиями использования.

0 голосов
/ 07 февраля 2012

Я понял, как это сделать, не лучшим способом с точки зрения эффективности, но это работает. В любом случае, это не эффективность, а стремление заставить ее «просто работать».

Итак, что я делаю, так это зацикливаюсь на размере первого массива и проверяю, принадлежит ли слово какому-либо из массивов или нет. Когда я нахожу это, я сохраняю его значение частоты. Затем я снова перебираю массивы, за исключением того, что нашел слово первым. Я суммировал все частоты и, в конце концов, суммировал первую частоту, но суммировал остальные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...