osh*_*hai 3 scala map pattern-matching
我想在地图中找到与特定文本类似的键.我应该使用for循环还是有更优雅的方式?
您的问题的直接翻译是map.keys.find(_.matches(pattern))给定一个地图,获取它们的键并找到与正则表达式模式匹配的第一个键.
val map = Map("abc" -> 1, "aaa" -> 2, "cba" -> 3)
map.keys.find(_.matches("abc.*"))
// Some(abc)
map.keys.find(_.matches("zyx"))
// None
Run Code Online (Sandbox Code Playgroud)
如果您不想扫描所有键,循环可能会适得其反.
假设您有一些您希望匹配的正则表达式:
val RMatch = """\d+:(\w*)""".r
Run Code Online (Sandbox Code Playgroud)
还有一个函数,它接受正则表达式的匹配组和映射中的值
def f(s: String, v: V): A
Run Code Online (Sandbox Code Playgroud)
然后你可以匹配正则表达式并收集函数的值:
map collectFirst { case (RMatch(_), v) => f(txt, v) }
Run Code Online (Sandbox Code Playgroud)
如果你只想要价值......
map collectFirst { case (RMatch(txt), v) => v }
Run Code Online (Sandbox Code Playgroud)
注意:此方法的实现会影响地图上的遍历,以防不是您想要的