在Scala中如何获取与另一个字符串中的一个模式匹配的所有字符串的列表。例如,我有两个列表
lst1=["a/b/d=20180103","a/c/d=20180201","a/c/d=20180102","a/e/d=20180104","a/b/d=20180203"]
lst2 = ["20180102", "20180103", "20180104"]
现在我需要与list1
匹配模式的list2
的交集。
预期产出:
["a/b/d=20180103", "a/c/d=20180102","a/e/d=20180104"]
答案 0 :(得分:1)
为什么不只是lst1.filter(s => lst2.exists(s.contains))
呢?
var a:MutableList<MSetting>
var b:List<MSetting>
答案 1 :(得分:0)
您可以使用scala中的简单for循环来实现此目的,即在列表中使用映射。
请查看下面的代码以便更好地理解: -
p <- ggplot(my_dat, aes(x,y,color=m))+
geom_quasirandom(method = 'pseudorandom') #instead of 'smiley'
p <- ggplot_build(p)
p$data[[1]] <- p$data[[1]] %>%
mutate(x=case_when(
colour=="#00BFC4" ~ PANEL + abs(PANEL - x),
TRUE ~ PANEL - abs(PANEL - x))
)
plot(ggplot_gtable(p))
希望这有帮助!
答案 2 :(得分:0)
您可以在第一个列表中使用collect
,并使用case
部分函数保留那些日期子字符串位于第二个列表中的元素:
val lst1 = List("a/b/d=20180103", "a/c/d=20180201", "a/c/d=20180102", "a/e/d=20180104", "a/b/d=20180203")
val lst2 = List("20180102", "20180103", "20180104")
lst1.collect{ case s if lst2.contains(s.split("=").last) => s }
// res1: List[String] = List(a/b/d=20180103, a/c/d=20180102, a/e/d=20180104)