我有这样的代码:
def a = [".15", "7..", "402", "..3"]
c = a.permutations() as List
println c[0].join()
哪个输出7....3402.15
。在这一个中,我只需要获得数字,即7,3402,15
。更值得注意的是,我需要总和,即在我们的例子中我们得到7,9,6
。
如何在groovy中完成这项工作?
答案 0 :(得分:2)
作为快速回复,一个解决方案是:
def result = [".15", "7..", "402", "..3"].permutations()*.
join()*. // Join each permutation together into a single string
split( '\\.' )*. // Split each of these Strings on the '.' char
findAll()*. // Remove empty elements (where we had '..' before splitting)
collect { it -> it*.toInteger().sum() } // Convert each String to List<Integer> and sum
答案 1 :(得分:1)
这样的东西? 这不是很好看的代码,但它应该传达意图......
[".15", "7..", "402", "..3"].permutations()*.join()*.replaceAll('\\.\\.*',',')*.split(',')*.collect{it.getChars().inject(0){a,b->a+ (new Integer(b as String))}}
编辑:更改了代码,使其适用于整个排列数组,而不仅仅是一个元素。类型转换很笨重,@ tim_yates代码更清晰。
代码的工作原理如下:
对于排列的每个子数组:
.
替换所有后续,
,
分开字符串
inject
方法现在,我不知道这是否是你所需要的,因为我不知道原来的问题。