2014-06-19 191 views
2

什么是使用scala验证更大列表值的最佳方法?比较两个列表 - Scala

例如:

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

我试图创建一个函数:

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

但我得到的消息:错误:值>不是一个构件列表[T]

+0

你需要列表'大小'。 –

+0

@LimbSoup'size'函数返回列表长度。我试图创建一个像clojure'compare'(http://clojuredocs.org/clojure_core/clojure.core/compare)的函数。 – Diullei

+1

我明白了。目前还不清楚你的“名单价值”是什么意思。在这种情况下,你可以使用'sum'来输入数字。对于其他类型,您需要定义“sum”的含义。 –

回答

4

对于complex reasons,你必须做一个imp

import Ordering.Implicits._ 

一旦你这样做的生活是幸福的:比较List和许多其他收藏品之前ORT

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

工作就像一个魅力!谢谢! – Diullei

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 
} 
+0

不错,谢谢! – Diullei