拖放直到在Haskell中模式的最后一次出现

米尔詹·厄克古洛夫

dropWhile要求一个谓词并从列表中一个元素中删除一个元素,直到谓词第一次为假,然后它只返回剩余的内容。例如,您可以从字符串列表中删除元素,直到找到以斜杠开头的字符串为止:

> dropWhile (not . isPrefixOf "/") ["a", "b", "/c", "d"]
["/c","d"]

但是,如果您要连续删除元素,直到最后一次匹配模式,该怎么办?例如,Python的os.path.join接受任意数量的字符串参数。如果任何参数以斜杠开头,则所有先前的参数都将被忽略,其余的参数则以分隔符连接:

>>> os.path.join("a", "/b", "c", "/d", "e")
'/d/e'

如何连续从列表中删除元素,直到最后一次满足某些条件?

米尔詹·厄克古洛夫

groupBy允许根据谓词对列表中的元素进行分组,该谓词以某种方式比较每两个近元素。每当谓词失败时,就会启动新组。因此,要根据每次出现的斜杠前缀对元素进行分组,则每当字符串以斜杠开头时,我们都应开始一个新的分组,因此谓词必须失败:

> groupBy (\x y -> not $ isPrefixOf "/" y) ["a", "/b", "c", "/d", "e"]
[["a"],["/b","c"],["/d","e"]]

因此,通用版本必须如下所示:

dropUntilLast :: (a -> Bool) -> [a] -> [a]
dropUntilLast f = last . groupBy (\x y -> not $ f y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何匹配直到bash shell中的字符最后一次出现

从 Regex 模式中的多次出现中捕获最后一次出现

Oracle中的最后一次出现

保持字符串直到R中第一次出现模式

gsub:删除直到第一次出现而不是最后一次出现在一行中的给定字符

如何匹配模式的最后一次出现?

带有 awk 的模式的最后一次出现的行号

如何从文件中获取两个模式之间的行的最后一次出现?

Javascript正则表达式:剥离路径,直到捕获组中的最后一次出现

awk或sed在模式的第一次出现和模式的最后出现之间打印文本

获取Excel中列表中的最后一次出现

在 Notepad++ 中,如何用新行替换一行中最后一次出现的模式?

获取模式在另一个模式之前的最后一次出现

正则表达式匹配所有内容,直到最后一次出现/

pyspark 中的最后一次出现索引

从文件中删除最后一次出现的}

python中列表中最后一次出现的index()

在sql中查找条目的最后一次出现

查询以替换 postgres 8.3 中的最后一次出现

正则表达式查找字符串中模式的最后一次出现

哪个简单快速的UNIX命令可以打印最后一次出现的模式中的所有行?

仅在直到第一次出现另一种模式之前找到模式(或:如何从混合效果模型的公式中删除随机效果)

如何提取所有内容,直到第一次出现模式

获取第一个模式的最后一次出现

获取元素的最后一次出现

取代最后一次出现结肠

按最后一次出现分组

如何在 Common Lisp 中使用正则表达式来获取字符串中的所有内容,直到最后一次出现“/”?

在Golang中最后一次出现模式后,HTML模板解析提取标头