2013-04-16 91 views
32

的一部分,我有一個這樣的字符串:檢查,如果在列表中的值是字符串

val a = "some random test message" 

我有一個這樣的名單:

val keys = List("hi","random","test") 

現在,我要檢查是否字符串a包含來自keys的任何值。我們如何使用Scala的內置函數來實現這一點?

(我知道分裂a列出的方式,然後做一次檢查與keys列表,然後找到解決方案。但我正在尋找解決它更簡單地使用標準庫函數的方式。)

回答

51

像這樣?

keys.exists(a.contains(_)) 

或甚至更慣用

keys.exists(a.contains) 
+0

或'keys exists a.contains' – Eastsun

+2

根據OP的需要,val keys = List("mess")將產生可能是誤報的結果。 keys.exists(a.split(' ').contains)可能更準確。 – nadavwr

+2

這個解決方案很棒,但我很難理解它。你們能幫我嗎? – KirdApe

7

的簡單情況是測試子串遏制,例如(如在rarry的回答說)

keys.exists(a.contains(_)) 

你沒有說你是否真的想找到整個單詞匹配。由於rarry的答案假設你沒有,所以假設你有這個選擇。

val a = "some random test message" 
val words = a.split(" ") 
val keys = Set("hi","random","test") // could be a List (see below) 
words.exists(keys contains _) 

記住,鍵名單只適用於小名單有效。通過列表,contains方法通常線性掃描整個列表,直到找到匹配或達到結尾。

對於較大數量的項目,一組不僅更可取,而且更真實地表示信息。集合通常通過哈希碼等進行優化,因此需要更少的線性搜索 - 或根本不需要。

+0

+1強調使用Sets! – Sibi

相關問題