如何为元组添加排名序号?含排序规则与现有Scala代码
排序元组并添加排名序号的解决方案
问题说明
原始数据为以下元组集合:
("John", 23) ("Micheal", 8) ("Kathy", 8) ("Sam", 18)
需求:
- 先按数值(第二个元素)降序排序,数值相同时按名称(第一个元素)升序排序
- 为排序后的每个元组添加从0开始的前置排名序号,最终输出格式如下:
(0, John, 23) (1, Sam, 18) (2, Kathy, 8) (3, Micheal, 8)
当前已实现排序逻辑:
data.sortBy(x => (-x._2, x._1))
完整解决方案
可以通过zipWithIndex方法为排序后的元素添加索引,再重组元组结构来实现需求,完整代码如下:
// 假设data是包含原始元组的集合(以List为例) val data = List(("John", 23), ("Micheal", 8), ("Kathy", 8), ("Sam", 18)) // 排序 + 添加排名序号 val rankedData = data .sortBy(x => (-x._2, x._1)) // 按年龄降序、名称升序排序 .zipWithIndex // 为每个元素添加从0开始的索引 .map { case ((name, age), idx) => (idx, name, age) } // 重组为目标元组格式 // 打印结果 rankedData.foreach(println)
代码解释
zipWithIndex:会将排序后的每个元素与一个从0开始的整数索引配对,生成((名称, 年龄), 索引)格式的元组。map阶段:通过模式匹配解构配对后的元组,将索引移到最前面,转换成你需要的(索引, 名称, 年龄)结构。
内容的提问来源于stack exchange,提问作者yxx
相关产品推荐
相关产品推荐

