Какую реализацию нужно выбрать в Groovy для этой проблемы? - PullRequest
0 голосов
/ 02 марта 2011

Я изучаю Groovy в течение недели, но у меня есть проблема: мне нужно сохранить комбинации слов в соответствующих значениях ascii. Например, комбинация слова «the» и сумма значений ascii каждого символа равна 10 (не совсем, но все же, например, например).

Очевидно, есть другие слова, в которых сумма значений ascii равна 10. Мне нужна структура данных, в которой я могу найти значение 10 и получить слова, в которых сумма значений ascii равна 10. Я не могу сделать это в Groovy Map, потому что значение ключа должно быть уникальным. Как это сделать в Groovy?

Ответы [ 4 ]

3 голосов
/ 02 марта 2011

Вы могли бы сделать что-то вроде этого:

def words = [ 'the', 'het', 'love', 'groovy' ]

words.groupBy { ( it as char[] ).collect { it as int }.sum() }

Это дает вам карту:

[321:[the, het], 438:[love], 678:[groovy]]
2 голосов
/ 02 марта 2011

Вот небольшой пример, который инициирует Map, который возвращает пустой List в случае, если ключ запрашивается впервые с использованием метода withDefault:

def map = [:].withDefault { [] }

map[10] << 'the'
map[10] << 'as'
map[20] << 'from'

assert map[10] == ['the', 'as']
assert map[20] == ['from']
1 голос
/ 02 марта 2011

Вам нужна структура данных с несколькими картами. Один можно найти в Apache Commons, другой в Гуаве.

В Groovy вы можете использовать простой Map из int -> list со значением по умолчанию для удобства.

1 голос
/ 02 марта 2011

Карта Int в List of String должна исправить это. Просто добавьте слова, имеющие одинаковую сумму, в список, соответствующий ключу.

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