鉴于两个相同的元组,我如何按字典顺序比较它们?看起来这应该像下面的代码片段一样简单,但事实并非如此.任何简单的例子如何做到这一点?
var x = (1,2,3) < (1,2,4)
Run Code Online (Sandbox Code Playgroud)
如果他们列出,我可以定义一个递归函数,比较列表的头部直到找到差异或列表的结尾,但我不认为我可以为元组做到这一点.
Dan*_*ral 23
这并不简单,因为虽然
var x = (1,2,3) < (1,2)
Run Code Online (Sandbox Code Playgroud)
看起来很简单,
var x = (1,false,3) < (1,2)
Run Code Online (Sandbox Code Playgroud)
不是.你如何处理非订购类型?你如何处理同一元组位置的不同类型?
你要求所有类型都一样吗?在这种情况下,你没有元组.元组的重点是它的arity是固定的(你静态知道它有多大),每个元素可以是不同的类型.
如果我发现自己遇到了这个问题 - 而且我会努力不去 - 我会抓住Shapeless,将元组转换成像HLists这样的东西,然后尝试比较.
编辑
啊,现在它更容易:
import scala.math.Ordering.Implicits._
var x = (1,2,3) < (1,2,4)
Run Code Online (Sandbox Code Playgroud)
这些额外的含义不会自动提供,因为在某些情况下它们会导致不同的含义.
sch*_*mmd 13
如果您想使用Daniel的解决方案,<但如果您需要一种compare方法,则可以执行以下操作(例如).
implicitly[Ordering[Tuple2[Int, Int]]].compare((1,2), (2,3))
Run Code Online (Sandbox Code Playgroud)
为具有可比较部分的所有元组定义了排序.