You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala列表分组需求:按字符组成相同性对指定列表分组

解决Scala列表按字符异位词分组的问题

嘿,这个分组需求其实核心是识别字符异位词——也就是那些字符组成完全相同、只是顺序不同的字符串,把它们归为一组对吧?用Scala的集合API可以轻松实现,下面是具体的解决方法:

核心思路

为每个字符串生成一个唯一的分组标识:把字符串的字符排序后转成新字符串,比如"BCA"排序后是"ABC","CAB"排序后也是"ABC",这样所有异位词的标识就完全一致,用这个标识作为分组key就行。

完整代码实现

// 你的原始列表
val list1 = List("ABC","BCA","YRT","CAB","RTZ","XYZ","YXZ")

// 第一步:按排序后的字符串分组
val grouped = list1.groupBy(str => str.sorted)

// 第二步:提取分组后的各组数据,转成你需要的格式
val result = grouped.values.map(_.toTuple).toList

// 打印结果看看
println(result)
// 输出:List((ABC,BCA,CAB), (YRT), (RTZ), (XYZ,YXZ))

代码细节解释

  • groupBy(str => str.sorted):这是关键一步!str.sorted会把字符串的字符按自然顺序排序,比如"YXZ"排序后变成"XYZ",这样所有异位词都会被映射到同一个key下,自动完成分组。
  • grouped.values:groupBy返回的是一个Map(key是排序后的字符串,value是对应分组的列表),我们只需要取所有的value(也就是各个分组)。
  • map(_.toTuple):如果你需要把每个分组的List转成元组(和你给出的结果格式一致),Scala 2.13及以上版本支持toTuple方法,它会自动把不同长度的List转换成对应长度的元组(比如单元素List转成单元素元组,三元素List转成三元组)。
  • .toList:最后把结果转成List类型,方便后续使用。

这样处理后,得到的结果完全符合你的要求啦!

内容的提问来源于stack exchange,提问作者user9846972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:44:42