Groovy 如何将数字与';分开';?
我有这样的代码:Groovy 如何将数字与';分开';?,groovy,Groovy,我有这样的代码: def a = [".15", "7..", "402", "..3"] c = a.permutations() as List println c[0].join() 输出7…3402.15。在这个例子中,我只需要得到数字,即73402,15。更值得注意的是,我需要这些总和,即在我们的示例中,我们将得到7,9,6 如何在groovy中实现这一点?类似的东西? 这不是很好看的代码,但它应该传达的意图 [".15", "7..", "402", "..3"].permutat
def a = [".15", "7..", "402", "..3"]
c = a.permutations() as List
println c[0].join()
输出7…3402.15
。在这个例子中,我只需要得到数字,即73402,15
。更值得注意的是,我需要这些总和,即在我们的示例中,我们将得到7,9,6
如何在groovy中实现这一点?类似的东西?
这不是很好看的代码,但它应该传达的意图
[".15", "7..", "402", "..3"].permutations()*.join()*.replaceAll('\\.\\.*',',')*.split(',')*.collect{it.getChars().inject(0){a,b->a+ (new Integer(b as String))}}
编辑:更改代码,使其适用于整个排列数组,而不仅仅是一个元素。类型转换很笨拙,@tim_yates代码更干净
该守则的运作如下:
对于排列的每个子数组:
- 将数组连接到一个字符串
- 用一个
,
- 在
,
- 将此字符串中的所有字符转换为整数,并使用
方法将它们相加inject
- 将此字符串中的所有字符转换为整数,并使用
现在,我不知道这是否是您需要的,因为我不知道最初的问题。作为快速响应,一个解决方案是:
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
def result=[“.15”、“7..”、“402”、“0.3”]。排列()。
join()*。//将每个排列合并为一个字符串
拆分(“\\”)*.//在“.”字符上拆分这些字符串
findAll()*。//删除空元素(在拆分之前有“..”的位置)
collect{it->it*.toInteger().sum()}//将每个字符串转换为List和sum
@ashburaczenko:ha。。不完全是。。这是我的疑问。我正在用Top coder解决一个难题。你至少能给我一个线索告诉我怎么做。。将对其进行编码:)@ashburaczenko:我可以对其进行迭代并将其放入列表中,直到找到一个
并求和。但我想对于这种情况会有一些更常规的解决方案;)+你的想法很好。但是你能解释一下你在做什么吗?