gpt4 book ai didi

scala - 如何找到列表中每个字符串的字符串最后一个字符的值>

转载 作者:行者123 更新时间:2023-12-04 10:59:42 27 4
gpt4 key购买 nike

我需要根据条件过滤 List[String] 。列表中的每个字符串都以一个数字结尾,我需要过滤这个列表,以便新列表只包含以大于 5 的数字结尾的字符串。我对这个问题采取了很多方法,这是我能得到的最接近的方法让它工作,但它告诉我存在类型不匹配。

val filteredList = lines.filter(lines.foreach(lines(_).takeRight(1).toInt) > 5)

“行”是我要过滤的字符串列表。

所以如果我传入一个列表:
List("word 1", "word 2", "word 3", "word 6", "word 7", "word 8")

那么预期的输出将是:
List("word 6", "word 7", "word 8")

最佳答案

好的,这里有一个可能的解决方案:

我将您的测试数据扩展为也有坏数据:

val lines = List("word 1", "word 2", "word 3", "word 6", "word 7", "word 8", "", "bad")

过滤算法使用模式匹配,这里有 2 种情况。
val filteredList = 
lines.map(_.reverse.toList)
.filter{
case x::_ if Character.isDigit(x) => x.asDigit > 5
case _ => false
}.map(_.mkString.reverse)

我反转字符串并将其更改为列表,因此模式匹配更容易。在最后一行中,我再次重做。

如果您绝对确定 您的数据始终采用预期的形式 这是一个单类轮:
lines.filter(_.last.asDigit > 5)

好的,对于错误的数据,您还可以尝试将最后一个字符更改为数字。如果没有,则失败并返回 false。

请注意,有些人认为,您不应该使用异常处理来控制流程。
lines.filter(str =>
Try(str.last.asDigit > 5).getOrElse(false)
)

这里是 Luis Miguel Mejía Suárez 的版本:
lines.filter(line => 
line.lastOption.collect {
case char if (char.isDigit) =>
char.asDigit
}.fold(_ > 5)(ifEmpty = false)
)

关于scala - 如何找到列表中每个字符串的字符串最后一个字符的值>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com