【发布时间】:2021-07-19 02:58:25
【问题描述】:
我有一个问题,如果我能以某种方式缩短我的代码 - 我需要找到我的列表中的哪些字符串包含最多的 'a' 字母。我如下所示,但我几乎可以肯定我可以做得更短,但我不知道怎么做。
所以首先我将我的列表映射到元组,其中有(el, num),其中num 是“a”包含的数量(使用 foldLeft)。
然后我使用maxBy,所以我取一个具有最多'a'字母的元素,然后过滤num == res2._2 的所有元素(因为可能有多个元素具有相同数量的'一个'字母,所以我不能停在maxBy
我的代码:
def mostA(l: List[String]): List[String] = {
val res = l.map( string => (string, string.foldLeft(0)((acc,b) => if (b == 'a') acc + 1 else acc)))
val res2 = res.maxBy(x => x._2)
val res3 = res.filter(x => x._2 == res2._2).map{case (str, num) => str}
res3
}
【问题讨论】:
-
欢迎来到 Stack Overflow!由于您的代码已经在运行并且您只是想找到一种改进它的方法,我建议您在Code Review Stack Exchange 上提问,尽管请务必先通过他们的help pages。
-
我投票结束这个问题,因为 OP 的代码已经在工作,只是需要变得更短/更好。我认为这个问题可能属于 Code Review SE。
-
@user 我相信与其关闭它,不如迁移它。
-
@user 我只是将其标记为版主干预解释它应该迁移到codereview.stackexchange.com - 抱歉花了太长时间,我在手机里。
-
@LuisMiguelMejíaSuárez 供将来参考; Code Review 不是 Stack Overflow 的迁移目标。由于 Code Review 从 Stack Overflow 获得了太多不好的建议。因此,只有版主才能迁移问题。
标签: scala functional-programming