关闭。这个问题需要详细或明确。它目前不接受答案。
**想改进这个问题吗?**编辑这篇文章,添加细节并澄清问题。
21小时前关门。
改进这个问题
我有一个列表<map<enum,set>>我需要得到map<enum,set>
例如,我有:
listOf(mapOf(Enum.First to setOf("one", "two", "three")),
mapOf(Enum.Second to setOf("four", "five", "six")))
我需要:
mapOf(Enum.First to setOf("one", "two", "three"), Enum.Second to setOf("four", "five", "six"))
4条答案
按热度按时间kokeuurv1#
此函数用于将贴图列表展平为单个贴图。请注意,如果存在任何重复的键,则只会显示该键最后一次出现的值。
例子:
输出:
gwo2fgha2#
首先,有一个具体的优化方案
Map
保存枚举键的实现:EnumMap
.不幸的是,kotlin stdlib中没有方便的函数用于
EnumMap
创造(如其他Map
实现),因此您可以定义自己的(感谢@adam millerchip的想法):其次,当原始列表中有两个具有相同键(和不同值)的Map时,可能有不同的策略来缓解这种情况:
简单的策略是“最新胜利”:
另一种方法是“合并值”:
为方便起见,可以定义用于合并贴图的辅助扩展方法(并使用
union
使用中缀呼叫):xxhby3vn3#
试试这个:
hiz5n14c4#
我最初的方法类似于adam millerchip(可变Map和putall)。当列表中的每个Map包含多个条目时,效果会更好。
但是,对于op的特定情况,即列表中每个Map只有一个条目,以下解决方案非常方便:
在列表和每个
Map
使用entries.first()
得到它的唯一Entry
让它成为一个Pair
. 由此产生的Pair
然后将s转换为Map
.备选方案,使用关联
associate(transform -> Pair)
通过提供返回Pair(key, value)
.由于op没有指定如何处理具有相同键的贴图,“如果存在任何重复键,则只会显示该键最后一次出现的值。”
第一个选项的功能示例:
输出: