Как сравнить товар со всеми другими предметами, используя forEach в Kotlin? - PullRequest
0 голосов
/ 19 января 2019

Мне нужно по заданному списку слов определить, содержит ли он анаграммы.Например:

hasAnagrams(listOf("restful", "elvis", "fluster")) -> true
hasAnagrams(listOf("restful", "elvis", "real")) -> false

Мой код:

fun hasAnagrams(words: List<String>): Boolean =
words.map { it.split(" ") }.forEach { item -> return item.containsAll(item) }

Мой код возвращает единицу, и я не знаю, как вернуть логическое значение, делая код коротким, лаконичным и идиоматически правильным.Кроме того, я не знаю, стоит ли использовать .forEach или есть более правильный метод для этого действия.И правильно ли я написал эту строку item -> return item.containsAll(item)?

1 Ответ

0 голосов
/ 19 января 2019

В words.map вы разбиваете каждое данное предложение на список слов, а затем, для каждого из этого списка, вы проверяете, есть ли все элементы в этом списке в этом списке, что всегда верно.В этом примере нет смысла использовать foreach.Он возвращает Unit, который как void в Java.

Может быть, вы хотели что-то подобное?

fun hasAnagrams(words: List<String>): Boolean = words
    .map { it.split("").sorted() } // split given words into list of chars and sort
    .distinct() // get only unique lists
    .size != words.size // check if number of unique lists is equal to number of words in input list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...