【发布时间】:2020-08-06 19:56:50
【问题描述】:
我对编码和 Groovy 都很陌生。我需要根据列表中的值但使用匹配标准填充数据映射值。例如假设列表值的第二个字符等于 2,然后将其映射到数据映射中的“Number2”键。同样,我最终可能会拥有多个匹配此标准的列表值。我正在为下面的代码苦苦挣扎 - 它可以工作,但它总是会选择列表中最后一次出现的匹配值。我的理解是地图中只能有一个唯一的键值对。但是还有其他方法可以实现吗?对不起,我是这里的菜鸟。感谢所有帮助。谢谢!
def map = [:]
def ent = ['123','133','124','143','125']
ent.each{
println it.charAt(1)
}
ent.each{
if(it.charAt(1) == '2'){
println it.charAt(1)
println "is in entity $it"
map['Number2'] = it
map.each{ k, v -> println "${k}:${v}" }
}
}
预期结果:
['Number2':[123,124,125],'Number3':[133],'Number4':[143]]
【问题讨论】:
-
那么您是说当前列表中的索引 0,即字符 123,应该创建 Number123 = 123 的键/值对吗?并且索引 1 的值为 133 应该创建一个 Number133 = 133 的映射条目?你想如何处理重复的键?如果那不是你想要的,我需要你重新解释你想要什么。最好给我一个包含值的列表,然后告诉我生成的地图应该是什么样子。我绝对可以在这里帮助你。因为如果您总是将 2 映射到键 Number2,那么重复就无关紧要了。
-
您是否正在寻找有关如何为重复值创建唯一键的建议?如果是这样,我可以为您创建一个多地图结构
-
嗨,克里斯,不。不是我的意思。在我的代码中的 ent 列表中,有 3 个值在第二位有“2”——我认为是 index(1)。因此,无论值的长度如何,列表 ent 中第二个位置为 2 的任何值都应映射到“Number2”。希望这可以澄清。
-
我认为您在第二条评论中提到的正是我所需要的。重复值的唯一键。我会欢迎你的多地图结构..
-
是的,它澄清了。并且您希望本质上拥有一个键:值对,其中键(在本例中为 Number2 )不需要是唯一的?您是否需要数据结构具有与地图相同的 O(n) 搜索排序?因为如果是这样,那是不可能的,如果不是,我可以制作一个多地图数据结构或编写一些东西,用葡萄导入 Apache gauava
标签: list dictionary groovy collections