我已经创建了一个结构体,结构体上有一个度量标准。我正在生成一系列这些结构,我想根据这个指标将它们排序成一个数组。基本上,如果度量标准为0,我希望它在数组的[0]槽中的列表中,如果度量值为14,我希望它在数组的[14]槽中的列表中。度量的约束(数组的大小)是基于生成结构的相同变量而变化的,因此我需要使用malloc动态声明数组。我一直在试验如何获取我的结构列表。我无法弄明白。我已经搜索了问题并且无法找到解决方案。
此外,一旦我有了数组,如何将另一个元素添加到特定数组单元格的列表中?然后返回并将第i个单元格中列表的所有元素与第(n-i)个单元格的元素进行比较?
答案 0 :(得分:3)
您想要的是哈希表,有时也称为关联数组或词典。这是一个看起来像数组但可以获得任何(可散列)数据类型作为索引的数据结构;由于您的指标,您的结构是可清除的。动态哈希表(例如python的字典)将自行调整大小以适应其内容。
如果要在每个单元格中保留多个元素,只需将每个单元格设为一个列表即可。在python或任何其他高级语言中,您只需使用list数据类型。在较低级别的语言中,您可以使用链接列表。
答案 1 :(得分:1)
根据您的问题和您对@Yuval的评论,您似乎可以使用Python对此进行调查,如果我理解正确,您可能会有多个struct
具有相同的{{1}你希望现在将它们组合成一个列表的值(如果有任何错误,请更正我,并且我会尝试根据需要进行编辑)。
@Yuval提出了一个很好的观点 - 这似乎是关于使用哈希表/字典,一旦你习惯它们就非常有用。基本上,它们不是简单地通过某个索引访问元素,而是从0到metric
或类似,它们为您提供了一种方法,可以将键与值或值列表相关联。
这里有一些Python代码,假设您已经制作了N-1
,并且他们有struct
属性:
metric
这里有几个要点:
1)这些结果可能会出现在你的字典中,随机地#34; - 该指标不会连续订购。这与哈希表实际工作方式的一些内部细节有关,现在深入解释可能有些过分,但要记住的要点是字典是未排序的。要解决这个问题,当您访问元素时:
## 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
2)这(默默地)忽略了for metric, struct in sorted(metricDict.items()):
## whatever you want to do
具有相同值的多个struct
的问题 - 它仅保留在metric
的最后一个struct
上,覆盖以前的。有一些简单的方法可以解决这个问题 - 你可以存储一个值列表(或者,我可能会说:你存储的是一个结构列表的值),而不是存储单个值。
metric
我试图让它比必要更明确。这种将事物聚合和分组在一起的想法很常见,Python甚至还有一个让事情变得简单的模块:
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)
import collections
metricDict = collections.defaultdict(list)
for struct in structs:
key = struct.metric
metricDict[key].append(struct)
很聪明,知道如果它还没有看到一个键,而不是抛出错误,它只会创建一个默认值 - 在这种情况下为空列表 - 然后添加您的metricDict
到该列表。
现在访问结构列表:
struct