使用scala验证更大列表值的最佳方法是什么?
示例:
验证List(1, 2, 3)
是否大于List(2, 3, 4)
我尝试创建一个函数:
def listGt[T](li:List[T], l2:List[T]) = li > l2
但我收到了一条消息:错误:值>不是List [T]
的成员答案 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
}