0

我正在使用一种基于 C 且资源有限的自定义语言(一些类似于 C,另一些基于其他语言添加)。我只有非动态数组和矩阵,还有字典、堆栈、队列和堆、if's、for 和 while cicles。

我的问题是:有一个带有键:'a'(int)和值:'b'(int)的字典,并使用这些非动态结构,我怎么能以一种简单的方式反转字典,我有一个新字典如下:键:'b'(int),值:'a'(int[])

4

2 回答 2

1

以非动态内存为最大问题,不用担心处理时间或中间工件的大小,如何:

1)将原始字典以其他顺序倒入元组列表中。然后排序:

{'a': 1, 'b': 1, 'c': 2}

生产

[[1, 'a'], [1, 'b'], [3, 'c']]

2)遍历这个列表,遍历唯一的第一个值并构建映射值的列表(即原始键)。

... 生产

{'1': ['a', 'b'], '2':['c']}

3)丢弃中间列表并回收该内存。

根据事物的大小和需要的速度,您甚至可以添加一个步骤 (1.5),遍历中间列表并计算出所有内存需求,然后为每个元素预分配正确大小的列表。同样,最令人担忧的是动态内存的缺乏,并试图从一开始就提出“大小合适”的最终结果。

于 2013-05-23T17:34:07.117 回答
0

你不能。或者至少你不应该。为什么?因为假设您有两个具有相同值的键...

否则,在伪代码中:

create dictionary BAR
for each key in dictionary FOO
    BAR[FOO[key]] = key
于 2013-05-23T17:14:10.463 回答