Существует несколько библиотек, таких как Spark и другие расширения Scala, которые имеют функцию «GroupWith». Эта функция позволяет сравнивать элемент с остальной частью коллекции, а затем группировать ее с использованием одного или нескольких предикатов. По-видимому, для Scala не существует какой-либо собственной функциональности в Scala, но у них есть функция sortWith, которая ведет себя аналогично, но только сортирует элементы, а не группирует их. Если объяснение не является достаточным вот небольшим примером кода, который должен показать, что я пытаюсь сделать:Есть ли встроенная функция группировки, которая работает как функция sortWith?
val list = List(1,2,3,4,5,5)
val groupedList = list.groupWith{ (e,c) =>
e == c
}
Это очень простым пример, и я хочу делать более сложные сравнения, такие как
e + 1 == c
Итак, вопрос в том, есть ли какие-либо встроенные функции Scala, которые это делают? Любые предложения или обходные пути?
Update: Из простых примеров дали ему кажется, это не совсем ясно, что я пытаюсь сделать, вот лучший пример: Скажем, у меня есть класс дела и список этих объектов:
case class Item(num: Int, color: String)
val list = List(new Item(13, "red"), new Item(14,"red"), new Item(15, "blue"), new Item(16, "red"))
list.groupWith{ (e,c) =>
(e.num -1 == c.num || e.num + 1 == c.num) && e.color == c.color
}
И это должно вернуть что-то вроде этого:
res8: List[List[Item]] = List(List(Item(13,red), Item(14,red)), List(Item(15,blue)), List(Item(16,red)))
Ca вы показать нам, кто не знаком ж/Спарк groupWith, ваш результат в 'groupedList' для обоих случаях? – Teliatko
Мне не хватает семантики 'groupWith'. – Teliatko
Вы просто хотите, чтобы сгруппированные пары были упорядочены, то есть для (1, 3, 2, 3) и (e, e + 1) должны были возвращаться (1, 2), (2,3), (2, 3) или просто (2,3)? –