Groovy для разделения каждого 5-го персонажа с персонажем - PullRequest
0 голосов
/ 07 июня 2019

Мне нужен Groovy скрипт для вставки одной разделительной строки после каждого 10-го уникального номера

Пример: Ввод:
1
2
3
4
5
6
7
8
9
9
9
9
9
9
9
9
0
7
8
9
7

Вывод:

1
2
3
4
5
6
7
8
9
9
9
9
9
9
9
9
0
///////////////
7
8
9
7

Blockquote

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

в одну сторону:

def numbers = """\
1
2
3
4
5
6
7
8
9
9
9
9
9
9
9
9
0
7
8
9
7""".readLines().collect { it as Integer }


def unique = []  as Set
def seen   = [0] as Set // 0 - don't add delimiter at start

def result = numbers.inject([]) { acc, val -> 
  def s = unique.size()
  // if we are on a 10 multiple of unique numbers seen
  // and we have not already added a delimiter for this multiple 
  if (!(s % 10 || s in seen)) {
    acc  << '///////////////'
    seen << s
  }
  unique << val 
  acc    << val
}

// result will now contain the original list of numbers, 
// interleaved with the delimiter every 10th unique number
result.each { 
  println it
}

, что приводит к:

~> groovy solution.groovy
1
2
3
4
5
6
7
8
9
9
9
9
9
9
9
9
0
///////////////
7
8
9
7
0 голосов
/ 07 июня 2019
​def arr = [1,2,3,4,5,6,7,8,9,9,9,9,9,9,9,9,0,7,8,9,7]

def map = [:]

arr.each{
    println it
    map[it] = (map.containsKey("$it") ? map[it] : 1)+1
    if( map.size() == 10 ){
        println "/////"
        map = [:]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...