2015-08-03 1 views
0

(Еще новый для scala) У меня есть List[SortedSet[A]], и мне нужен уникальный SortedSet[A] со всеми уникальными и отсортированными элементами. Как мне это сделать?Преобразовать список отсортированного набора в sortedset в scala

Моя цель: У меня есть класс, скажем Container, которые содержат список Element и список (под) Container. Этот класс должен реализовать рекурсивные методы getSortedElements(): SortedSet[Element].

Так что я легко иметь этот неверный код: Set типы

case class Container(myElements: List[Element], myContainers: List[Container]){ 
    def getSortedElements(): SortedSet[Element] = 
     SortedSet(myElements) ++ SortedSet(myContainers.map(_.getSortedElements)) 
} 
+0

Чтобы уточнить, вы хотите, чтобы результат был 'SortedSet' со всеми элементами во ВСЕХ' SortedSet 'в' List'? – childofsoong

+0

Yup. 'List (SortedSet (3,5,7), SortedSet (2,5,8))' => 'SortedSet (2,3,5,7,8)', но не с целыми числами –

ответ

1

в Scala уже обеспечивает уникальность, поэтому все, что вам нужно сделать, это объединить их:

val a = SortedSet(1,2,3) 
val b = SortedSet(2,7,5) 
val c = SortedSet(1, 9) 
List(a, b, c).fold(SortedSet())((x, y) => x ++ y) 

Вы можете также использовать reduce вместо fold:

List(a, b, c).reduce((x, y) => x ++ y) 

См Scala : fold vs foldLeft для получения дополнительной информации о различиях между ними