如何创建没有上限的 SortedSet 的范围投影

How can I create a ranged projection of a SortedSet with no upper-bound

我有一个可变的 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 almost 方法给了我我需要的东西,但它不起作用,因为它需要一个索引作为参数,而我没有。

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

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

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

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

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

如果您真的很在意性能,可以使用 until, from 的 "opposite" :

set.from(media)

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