Scala, эквивалентный из нового HashSet (Набор)

expenditure.slice(i - d, i); слишком дорого, вы делаете это O (n ^ 2), копируя элементы массива за каждую итерацию. Используйте индексы для исходного массива для вычисления медианы: getMedianNumber(arr, startIndex, endIndex).

9
задан Peter Mortensen 6 May 2013 в 17:45
поделиться

2 ответа

Существует две части к ответу. Первая часть - то, что методы аргумента переменной Scala, которые берут T*, являются sugaring по взятию методов Seq[T]. Вы говорите Scala рассматривать Seq[T] как список аргументов вместо отдельного аргумента с помощью "seq: _ *".

Вторая часть преобразовывает Набор [T] в Seq[T]. Нет никакого генерала, созданного способом сделать в стандартных библиотеках Scala просто все же, но одном очень легком (если не обязательно эффективный), способ сделать это путем вызова toArray. Вот полный пример.

scala> val lst : java.util.Collection[String] = new java.util.ArrayList
lst: java.util.Collection[String] = []

scala> lst add "hello"
res0: Boolean = true

scala> lst add "world"
res1: Boolean = true

scala> Set(lst.toArray : _*)
res2: scala.collection.immutable.Set[java.lang.Object] = Set(hello, world)

Отметьте scala. Predef. Набор и scala.collection.immutable. HashSet являются синонимами.

7
ответ дан 4 December 2019 в 11:44
поделиться

Самый краткий способ сделать это должно, вероятно, использовать ++ оператор:

import scala.collection.immutable.HashSet
val list = List(1,2,3)
val set = HashSet() ++ list
11
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: