根据您的问题以及您对@Yuval 的评论,您似乎可以使用Python 对此进行调查,如果我理解正确,您可能有多个struct 具有相同的metric 值,您现在想将它们组合成一个列表(如果其中有任何错误,请纠正我,我会根据需要尝试进行编辑)。
@Yuval 提出了一个很好的观点——这似乎是关于使用哈希表/字典,一旦你习惯了它们就会非常有帮助。基本上,它们不是简单地通过某个索引访问元素,范围从 0 到 N-1 或类似的,它们为您提供了一种将键与值或值列表相关联的方法。
这是一些 Python 代码,假设您已经创建了 structs,并且它们具有 metric 属性:
## build the hahtable
metricDict = dict() ## or: metricDict = {}
for struct in structs:
key = struct.metric
metricDict[key] = struct
## access your items:
for metric, struct in metricDict.items():
## ... whatever you want to do
这里有几个关键点:
1) 这些结果可能看起来像是“随机”从您的字典中出来的——指标不会连续排序。这与哈希表如何实际工作的一些内部细节有关,现在深入解释可能有点过头了,但要记住的要点是字典是未排序的。为了解决这个问题,当您访问元素时:
for metric, struct in sorted(metricDict.items()):
## whatever you want to do
2) 这(默默地)忽略了多个structs 具有相同metric 值的问题 - 它只保留最后一个struct 和metric,覆盖以前的那些。也有一些简单的方法可以解决这个问题 - 您可以存储一个值列表,而不是存储单个值(或者,我可能会说:您存储的值是一个结构列表)
metricDict = dict()
for struct in structs:
key = struct.metric
if key in metricDict:
metricDict[key].append(struct) ## add the struct to the list
else: ## first time we've seen key
metricDict[key] = list() ## or metricDict[key] = []
metricDict[key].append(struct)
我试图让它比必要的更明确一点。这种将事物聚合和组合在一起的想法非常普遍,以至于 Python 甚至有一个模块可以让事情变得更简单:
import collections
metricDict = collections.defaultdict(list)
for struct in structs:
key = struct.metric
metricDict[key].append(struct)
metricDict 足够聪明,知道如果它还没有看到密钥,而不是抛出错误,它只是创建一个默认值 - 在这种情况下是一个空列表 - 然后添加你的 struct到那个列表。
现在访问您的结构列表:
for metric, structs in sorted(metricDict.items()):
## print(metric)
for struct in structs:
## whatever you wanted to do
## print(struct)