Scala中如何找出列表重复元素?列表按|分割失败求助
解决Scala中列表元素分割与重复统计的问题
嘿,我来帮你理清这个问题的根源和解决办法:
为什么你分割后得到奇怪的结果?
你遇到的问题主要有两个原因:
- 首先,你直接把
List对象转成String后,Scala中List的默认字符串格式是List(1, 1, 1, 2,...),里面根本没有你以为的|分隔符,自然没法用|分割出正确的元素; - 其次,
|是正则表达式里的特殊字符(表示“或”的逻辑),直接调用split("|")会把字符串的每个字符都拆分开,这就是你得到L i s t ( 1 0 3 )这类零散字符结果的原因。
正确的处理步骤
1. 先把|分隔的字符串转成整数列表
如果你的原始数据是一个用|分隔的字符串,先把它处理成合法的整数List:
// 假设你的原始字符串是这样的 val str = "1|1|1|2|3|4|5|5|6|100|101|101|102" // 分割字符串(注意用\\|转义正则特殊字符),转成整数后再转成List val dup = str.split("\\|").map(_.toInt).toList
2. 统计每个元素的重复次数
接下来就可以用你之前知道的方法来统计,还可以优化得更简洁一点:
// 你的原方法没问题,这里提供一个更高效的写法(避免创建中间List) val ans2 = dup.groupBy(identity).view.mapValues(_.size).toMap
3. 筛选重复元素(可选)
如果只需要找出重复的元素(次数>1的),可以再加一步筛选:
val duplicates = ans2.filter(_._2 > 1) // 结果会是:Map(1 -> 3, 5 -> 2, 101 -> 2)
内容的提问来源于stack exchange,提问作者Harshit Kakkar
相关产品推荐
相关产品推荐

