的一部分,我有一個這樣的字符串:檢查,如果在列表中的值是字符串
val a = "some random test message"
我有一個這樣的名單:
val keys = List("hi","random","test")
現在,我要檢查是否字符串a
包含來自keys
的任何值。我們如何使用Scala的內置函數來實現這一點?
(我知道分裂a
列出的方式,然後做一次檢查與keys
列表,然後找到解決方案。但我正在尋找解決它更簡單地使用標準庫函數的方式。)
的一部分,我有一個這樣的字符串:檢查,如果在列表中的值是字符串
val a = "some random test message"
我有一個這樣的名單:
val keys = List("hi","random","test")
現在,我要檢查是否字符串a
包含來自keys
的任何值。我們如何使用Scala的內置函數來實現這一點?
(我知道分裂a
列出的方式,然後做一次檢查與keys
列表,然後找到解決方案。但我正在尋找解決它更簡單地使用標準庫函數的方式。)
像這樣?
keys.exists(a.contains(_))
或甚至更慣用
keys.exists(a.contains)
的簡單情況是測試子串遏制,例如(如在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
方法通常線性掃描整個列表,直到找到匹配或達到結尾。
對於較大數量的項目,一組不僅更可取,而且更真實地表示信息。集合通常通過哈希碼等進行優化,因此需要更少的線性搜索 - 或根本不需要。
+1強調使用Sets! – Sibi
或'keys exists a.contains' – Eastsun
根據OP的需要,
val keys = List("mess")
將產生可能是誤報的結果。keys.exists(a.split(' ').contains)
可能更準確。 – nadavwr這個解決方案很棒,但我很難理解它。你們能幫我嗎? – KirdApe