比较两个列表 - Scala

时间:2014-06-19 17:07:08

标签: scala

使用scala验证更大列表值的最佳方法是什么?

示例:

验证List(1, 2, 3)是否大于List(2, 3, 4)

我尝试创建一个函数:

def listGt[T](li:List[T], l2:List[T]) = li > l2

但我收到了一条消息:错误:值>不是List [T]

的成员

2 个答案:

答案 0 :(得分:4)

对于complex reasons,您必须在比较List和许多其他集合之前进行导入:

import Ordering.Implicits._

一旦你这样做,生活就会幸福:

List(1) < List(2) // true
List(List(2), List(1)).sorted // swaps order as expected

答案 1 :(得分:2)

如果您想比较3D矢量的长度,以下可能不会返回您想要的内容:

import Ordering.Implicits._
println(List(2, 3, 4) > List(-2, -3, -4)) // prints true, but lengths are equal

这可能适合:

object Main {

  def main(args: Array[String]): Unit = {
    val res = listGt(List(1, 2, 3), List(2, 3, 4))
    println(res) // false
    val res2 = listGt(List(2, 3, 4), List(1, 2, 3))
    println(res2) // true
  }

  implicit def coordsToLength[T <% Double](li: List[T]) = math.sqrt(li.foldLeft(0.0)(_ + math.pow(_, 2)))

  def listGt[T <% Double](li: List[T], l2: List[T]) = li > l2
}