2013-01-10 113 views
51

我需要檢查列表中是否存在字符串,並調用相應接受布爾值的函數。Scala檢查列表中是否存在元素

是否可以用一個班輪來實現這一點?

下面的代碼是最好的,我可以得到:

val strings = List("a", "b", "c") 
val myString = "a" 

strings.find(x=>x == myString) match { 
    case Some(_) => myFunction(true) 
    case None => myFunction(false) 
} 

我敢肯定,這可以用更少的代碼來做到這一點,但我不知道怎麼辦!

回答

75

只需使用contains

myFunction(strings.contains(myString)) 
+1

如果我不處理字符串,但我需要檢查一個值是否是任何可能的匹配數量? – tutuca

+13

然後,你應該問一個新的問題,... –

+1

@tutuca,檢查這[檢查,如果值列表是部分字符串](http://stackoverflow.com/questions/16046146 /檢查-如果值-在一覽是 - 部分 - 的字符串)。 –

23

如果你不想使用嚴格的平等,你可以使用exists:


myFunction(strings.exists { x => customPredicate(x) }) 
1

這應該與不同的謂詞也行

myFunction(strings.find(_ == mystring).isDefined) 
+3

您可以使用存在,而不必使用查找結合isDefined – Ciaran0

1

在你的情況下,我會考慮使用設置而不是列表,以確保你有獨特的價值觀LY。除非有時需要包含重複項。

在這種情況下,您不需要在列表中添加任何包裝函數。

1

更簡單!

strings contains myString 
+0

這與[接受的答案](https://stackoverflow.com/a/14267635/8371915)有什麼不同? – user8371915

+0

它基本上是一樣的,但不同之處在於:1.括號較少2.期間較少3.沒有提及myFunction 4.更多的空白區域。總體;我的答案= 25個字符vs接受的答案= 38個字符 – Taylrl

+0

這是一個修辭問題;)給你一個我從[LQP](https://stackoverflow.com/review/low-quality-posts/)獲得的背景。我不建議刪除,但如果您發佈的時間較晚,請嘗試提供一些附加值。你知道,它不喜歡它的一些語法糖。只是說... – user8371915