【发布时间】:2022-01-21 02:15:51
【问题描述】:
我正在为其编写脚本的任务是查找字谜,然后按照找到的字谜数量的降序对单词进行排序(或者当两个单词的数字相同时按字母顺序)。我的脚本如下所示:
static getCharactersCount(String word) {
def res = [:]
word.each { res.merge(it, 1, Integer::sum) }
return res
}
//def data = new URL('http://wiki.puzzlers.org/pub/wordlists/unixdict.txt').getText().split("\n").collect { it.trim() }
data = ["hello", "abc", "heoll", "def", "olehl"]
def res = data
.groupBy { getCharactersCount(it) }
.collect { it.value }
def anagramMap = [:]
res.each {
anagrams ->
anagrams.each {
anagramMap[it] = anagrams.toSet().minus(it)
}
}
anagramMap
.findAll { it.value.size() > 0 }
.sort { a1, a2 ->
a1.value.size() == a2.value.size() ? a1.key.compareTo(a2.key) : a2.value.size() - a1.value.size()
}
.each { println("$it.key: ${it.value.join(" ")}") }
脚本可以正常工作,但是我想知道anagramMap 变量是否是必要的。是否可以将使用键和值填充anagramMap 的逻辑集成为对data 对象的操作?
我尝试整合逻辑但失败了:
data
.groupBy { getCharactersCount(it) }
.collect { it.value }
.each {map -> map.value.each {println("$it, ${map.value.toSet().minus(it)}")}}
编辑:
结果应该打印到控制台。一行存储一个单词及其字谜。不带字谜的单词会被忽略:
hello: olehl heoll
heoll: olehl hello
olehl: hello heoll
【问题讨论】:
-
提供所需的输出
-
@injecteer,我编辑了问题,以便它反映所需的输出。
标签: groovy functional-programming anagram