我想比较Scala中两组的基数 . 由于Scala中的东西有时候"just work",我尝试在集合之间使用 <
. 它似乎经历了,但我无法理解结果 .
例:
scala> Set(1,2,3) < Set(1,4)
res20: Boolean = true
-
它返回什么?
-
我在哪里可以阅读API中的此方法?
-
为什么不列在
scala.collection.immutable.Set
下的任何地方?
更新:即使集合中元素的顺序(??)似乎也很重要:
scala> Set(2,3,1) < Set(1,3)
res24: Boolean = false
scala> Set(1,2,3) < Set(1,3)
res25: Boolean = true
3 回答
这不适用于2.8 . 在Scala 2.7上,会发生什么:
换句话说,在
scala.Predef
上定义了隐式转换,对于所有Scala代码都是"imported",从Iterable[A]
到Ordered[Iterable[A]]
,前提是有一个隐含的A => Ordered[A]
可用 .鉴于集合的可迭代顺序未定义,您无法真正预测它 . 例如,如果添加元素以使设置大小大于4,则会得到完全不同的结果 .
如果您想比较基数,请直接进行:
我对Scala的了解不多,但做了一些测试,我得到以下内容:
这告诉我
<
来自特质Ordered
. 更多提示:也就是说,
Set
被评估为Iterable
,因为可能存在从Iterable [A]到Ordered [Iterable [A]]的隐式转换,但我不确定...测试不一致 . 例如,这两个可能暗示一种词典比较:1相等,2相等,3小于4 .
但这些不是:
我认为正确的答案是在
Ordered
trait中找到的:在集合之间没有比实现它们的hashCode更多的实现了<
: