6

我正在做一个项目,我需要存储一个由两个字符串键索引的数字矩阵。矩阵不是锯齿状的,即如果任何行都存在列键,那么它应该存在于所有行。同样,如果任何列都存在行键,那么它应该存在于所有列中。

表达这一点的明显方法是使用关联数组的关联数组,但这既尴尬又低效,并且它不强制非锯齿属性。是否有任何流行的编程语言提供了内置于语言中或作为其标准库的一部分的关联矩阵?如果是这样,它们在 API 和实现级别是如何工作的?我在这个项目中使用 Python 和 D,但其他语言的示例仍然有用,因为我可以查看 API 并找出在 Python 或 D 中实现类似功能的最佳方法。

4

3 回答 3

2

为什么不只使用标准矩阵,而是有两个字典 - 一个将行键转换为行索引,另一个将列键转换为列索引。我认为你可以制作自己的结构,这样可以很容易地工作。您只需创建一个包含矩阵和两个字典的类,然后从那里开始。

于 2010-02-11T19:53:27.493 回答
0

在 Python 中,您可以有一个由两个字符串的元组索引的 dict,例如

>>> d = {}
>>> d["foo","bar"] = 10
>>> d
{('foo', 'bar'): 10}

我不确定“强制非锯齿状”对您意味着什么,但您可以使用 defaultdict 为尚未明确设置的条目返回默认值,或者使用已知值初始化 dict:

>>> xkeys = "abcdef"
>>> ykeys = "xyz"
>>> d = dict(((x,y), 0) for x in xkeys for y in ykeys)
>>> d
{('b', 'y'): 0, ('a', 'z'): 0, ('b', 'x'): 0, ('e', 'y'): 0, ('a', 'x'): 0, ('f', 'z'): 0, ('a', 'y'): 0, ('f', 'y'): 0, ('d', 'y'): 0, ('f', 'x'): 0, ('d', 'x'): 0, ('e', 'x'): 0, ('e', 'z'): 0, ('c', 'x'): 0, ('d', 'z'): 0, ('c', 'y'): 0, ('c', 'z'): 0, ('b', 'z'): 0}

如果您想强制只允许已知集合中的键,那么我建议对 dict 进行子类化以添加验证。

于 2010-02-11T20:00:09.287 回答
0

python的larry模块最近发布了。我相信它会做你想要的。

于 2010-02-11T20:54:16.240 回答