Как разделить числа отдельно от «.»? - PullRequest
1 голос
/ 12 февраля 2012

У меня есть такой код:

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?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

В качестве быстрого ответа одним из решений будет:

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 голос
/ 12 февраля 2012

Как то так? Это не очень красивый код, но он должен передавать намерение ...

[".15", "7..", "402", "..3"].permutations()*.join()*.replaceAll('\\.\\.*',',')*.split(',')*.collect{it.getChars().inject(0){a,b->a+ (new Integer(b as String))}}

Редактировать: изменил код, чтобы он работал для всего массива перестановок, а не только для одного элемента. Преобразование типов неуклюже, код @tim_yates намного чище.

Код работает следующим образом:

для каждого подмассива перестановки:

  • Объединить массив в одну строку
  • Заменить все последующие . одним ,
  • Разделить строку на ,
    • преобразовать все символы в этой строке в целые числа и сложить их, используя метод inject

Теперь я не знаю, нужно ли вам это, поскольку я не знаю исходную проблему.

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