**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
两天前关门了。
改进这个问题
我有一个问题,如果我能以某种方式缩短我的代码-我需要找到什么字符串在我的名单中包含最多的'a'字母。我做的如下,但我几乎可以肯定,我可以做得更短,但我不知道如何。所以首先我把我的列表Map到tuple,在那里我有 (el, num)
在哪里 num
是“a”包含多少(使用foldleft)。然后我用 maxBy
所以我取一个a字母最多的元素,然后过滤 num
== res2._2
(因为可能有多个元素具有相同数量的“a”字母,所以我不能停在 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
}
2条答案
按热度按时间m4pnthwp1#
你的代码已经很小很简洁了。但是,我们可以做一些改进:
也就是说,我们替换了
foldLeft
在字符串中count
我们融合在一起filter
+map
在一个collect
另外,请记住最后一个表达式是返回值,因此没有必要将它赋给变量,以便稍后仅返回它。busg9geu2#
稍加努力,你就可以一蹴而就: