Удалить все дублированные целые числа в списке - PullRequest
1 голос
/ 27 марта 2020

Учитывая список [1,2,2,3,5,5,6]

Я хочу полностью удалить дублирующиеся значения и получить: [1,3,6]

Я ищу однострочное решение с менее чем n ^ 2 сложности и groovy функции, если это возможно!

Текущий код, с которым я работаю:

def elements = [1,2,2,3,5,5,6]

def occurrences = [:]
elements.each {
    occurrences[it] = occurrences[it] ?: 0
    occurrences[it] += 1
}

elements.findAll{ occurrences[it] == 1 }

Ответы [ 3 ]

5 голосов
/ 27 марта 2020

Лучшее, что я могу себе представить, это:

[1,2,2,3,5,5,6].countBy { it }.findAll { it.value == 1 }.keySet()

Или

[1,2,2,3,5,5,6].countBy { it }.findAll { it.value == 1 }.collect { it.key }

Чтобы сохранить результат в виде списка

... или .. .

[1,2,2,3,5,5,6].countBy { it }.findResults { it.value < 2 ? it.key : null }

?

0 голосов
/ 27 марта 2020

Вы также можете попробовать:

def elements = [1,2,2,3,5,5,6]
def elementsAux = elements.collect()

elements.removeAll { elementsAux.count(it) > 1 }

Вы получите: [1,3,6]

0 голосов
/ 27 марта 2020
elements.countBy{it}.grep{it.value < 2}.collect{it.key}

Это также поможет вам.

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