如何创建没有上限的SortedSet的远程投影

时间:2015-11-04 01:24:16

标签: scala sortedset

我有一个可变的SortedSet对象,我想根据给定的中位数将其分成两半。因为中间对象不在集合中,所以它没有要拆分的索引。

import scala.collection.mutable.SortedSet

class MyClass(val x:Int)

// order based on a property of the object
val order = Ordering[Int].on[MyClass](mc => mc.x)
val set = SortedSet[MyClass]()(order)

set += new MyClass(3)
set += new MyClass(5)

val median = new MyClass(4)

我可以使用tountil来获得没有下限的远程投影,但我无法弄清楚如何获得没有上限的远程投影。方法splitAt 几乎给了我我需要的东西,但它不起作用,因为它将索引作为参数,我没有。

// this gives me the lower half
set.until(median)
// how do I get the upper half?

有没有一种很好的方法可以获得没有上限的远程投影?或者,是否有一种很好的方法可以获得用于splitAt方法的正确索引?理想情况下,我希望找到性能最佳的解决方案。

2 个答案:

答案 0 :(得分:2)

您正在寻找from?对不起,如果我遗漏了一些明显的东西。

答案 1 :(得分:0)

val (lower, higher) = set.partition(x => order.lt(x, median))

如果您不关心这种性能改进。我通常喜欢这种风格,对我来说似乎更容易阅读,更紧凑,而且性能提升通常并不那么重要。你也可以这样写(不需要订购东西):

val (lower, higher) = set.partition(c => c.x < median.x)

如果您真的关心表现,可以使用untilfrom的“反面”:

set.from(media)