首页 > 解决方案 > 以最大化同一初始集合的元素之间的距离的方式从多个集合创建单个集合

问题描述

假设您有以下数据结构:

val words   = Seq("cat", "dog", "kid", "dee", "ding", "chip", "chord")
val grouped = words.groupBy(_.charAt(0))

什么是创建另一个集合的好方法,该集合是通过grouped循环获取序列的每个元素而形成的?即是这样的:

Seq("kid", "dog", "cat", "dee", "chip", "ding", "chord")

或者

Seq("dog", "cat", "kid", "dee", "chip", "ding", "chord")

我们事先不知道会有多少个序列grouped

标签: algorithmscala

解决方案


您可以使用zipWithIndex将它们与每个组内的索引组合来展平值,然后按该索引分组并再次展平:

grouped.values
    .flatMap(xs => xs.zipWithIndex)
    .groupBy(_._2)
    .values
    .flatMap(_.unzip._1)

推荐阅读