2017-09-23 101 views
1

我有一個scala元組的列表,按元組的第一個元素降序排列。 我嘗試了一些操作如下,可以還給我幾個要素從列表或List()從List [Int,Int]返回Scala中的(Int,Int)選項

scala> val l = List((95,6),(10,2),(8,5)) 
l: List[(Int, Int)] = List((95,6), (10,2), (8,5)) 

scala> l.filterNot({case (x,y)=>x/5<2}) 
res6: List[(Int, Int)] = List((95,6), (10,2)) 

scala> l.filterNot({case (x,y)=>x/5<200}) 
res7: List[(Int, Int)] = List() 

我想寫可以包裝和返回選項類型,這將是列表的第一個元素的實用方法如果filterNot尚未將清單清空到List(),則爲元組。如果filterNot給我List(),我只想返回None。如果filterNot給我一個List項目,我想做選項(l(0))。我可以通過定期檢查和所有檢查來完成,但我想知道如何以更實用的方式進行檢查?

+2

'一些(l(0))或'None'是'l.headOption',順便說一句 –

回答

4

一個更好的選擇是使用List.find這需要一個謂詞並返回第一個匹配:

scala> l find { case (x, y) => x/5 >= 2 } 
res5: Option[(Int, Int)] = Some((95,6)) 

scala> l find { case (x, y) => x/5 >= 200 } 
res6: Option[(Int, Int)] = None 

注意我逆轉比不到,因爲我們不是否定謂語更大。

+0

你想> =,not>。 – HTNW

+0

@HTNW Woops,錯過了,謝謝! –