2016-09-24 50 views
-1

我想過濾一個包含配對的列表。在配對列表上使用scala的過濾器

例如我的名單是

列表((1,2),(3,4),(5,2))

我要使用過濾器來過濾列表,從而只包含答案第一個數字大於第二個數字。我怎樣才能做到這一點?

所以,結果列表將

列表((5,2))

+1

你至少應該嘗試一些東西。你可以在任何地方閱讀關於List.filter和關於pair(元組)的信息。元組:https://www.tutorialspoint.com/scala/scala_tuples.htm 列表api:http://www.scala-lang.org/api/2.10.3/#scala.collection.immutable.List – pedrorijo91

回答

3

在對第一個數字過濾器比第二度:

val ls = List((1,2),(3,4),(4,5),(6,2)) 
ls.filter(pair => pair._1 > pair._2) // List((6, 2)) 
+1

謝謝您!那麼,當你在代碼中編寫pair時,scala如何知道「pair」是什麼? 哦,我明白了。無論你想要什麼,你都可以打電話。如果我理解正確,你是否簡單地告訴它,對於列表中的每一對,查看第一個元素(_1)並將其與第二個元素(_2)進行比較? – Vandexel

+0

你可以任意調用它。 Pair是一種元組(Tuple2是精確的)。你可以引用Tuple_1,tuple_2,tuple_3等元組的元素。例如:'val tuple =(10,11,12,13)// tuple._4 == 13' – Samar

3

您的例子不有道理,但我想你仍然想在某些謂詞上過濾你的列表。

較容易的是解構對:

scala> val l = List((1,2), (3,4), (4,5)) 
l: List[(Int, Int)] = List((1,2), (3,4), (4,5)) 
scala> l.filter { case (a, b) => a > b } 
res0: List[(Int, Int)] = List() 
+0

對不起,我已經交換了條件。薩馬幫我編輯它,現在更新。 – Vandexel

+0

我通常更喜歡這裏的解構方法,並且幾乎從不使用'_1'訪問器作爲樣式。但是對於他們自己! – acjay