我正在使用一种基于 C 且资源有限的自定义语言(一些类似于 C,另一些基于其他语言添加)。我只有非动态数组和矩阵,还有字典、堆栈、队列和堆、if's、for 和 while cicles。
我的问题是:有一个带有键:'a'(int)和值:'b'(int)的字典,并使用这些非动态结构,我怎么能以一种简单的方式反转字典,我有一个新字典如下:键:'b'(int),值:'a'(int[])
我正在使用一种基于 C 且资源有限的自定义语言(一些类似于 C,另一些基于其他语言添加)。我只有非动态数组和矩阵,还有字典、堆栈、队列和堆、if's、for 和 while cicles。
我的问题是:有一个带有键:'a'(int)和值:'b'(int)的字典,并使用这些非动态结构,我怎么能以一种简单的方式反转字典,我有一个新字典如下:键:'b'(int),值:'a'(int[])
以非动态内存为最大问题,不用担心处理时间或中间工件的大小,如何:
1)将原始字典以其他顺序倒入元组列表中。然后排序:
{'a': 1, 'b': 1, 'c': 2}
生产
[[1, 'a'], [1, 'b'], [3, 'c']]
2)遍历这个列表,遍历唯一的第一个值并构建映射值的列表(即原始键)。
... 生产
{'1': ['a', 'b'], '2':['c']}
3)丢弃中间列表并回收该内存。
根据事物的大小和需要的速度,您甚至可以添加一个步骤 (1.5),遍历中间列表并计算出所有内存需求,然后为每个元素预分配正确大小的列表。同样,最令人担忧的是动态内存的缺乏,并试图从一开始就提出“大小合适”的最终结果。
你不能。或者至少你不应该。为什么?因为假设您有两个具有相同值的键...
否则,在伪代码中:
create dictionary BAR
for each key in dictionary FOO
BAR[FOO[key]] = key