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

来表达这种明显的方法是使用关联数组的关联数组,但这既笨拙和低效的,并且它不执行非锯齿属性。是否有任何流行的编程语言提供两种语言内置的或作为其标准库的一部分关联矩阵?如果是这样,他们是如何工作的,无论是在API和执行层面?我使用Python和d为这个项目,但在其他语言的例子仍然是有用的,因为我能看的API,并找出落实在Python或d类似的东西的最佳方式。

有帮助吗?

解决方案

为什么不直接使用标准的矩阵,但随后有两个库 - 一个转换行按键排索引和一个转换列键列索引。你可以使自己的结构,将这种方式工作很容易,我认为。您只需打一个包含矩阵和两个库一类,并从那里走了。

其他提示

在Python中,你可以有一个字典由两个字符串的元组索引,e.g

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

我不知道什么是“强制执行非锯齿”是指你,但你既可以使用一个defaultdict为尚未明确设置条目返回的默认值,或者初始化与已知值的字典:

>>> 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}

如果要强制执行,只有在一组已知键被允许,那么我建议子类字典添加的验证。

拉里获得Python模块最近发布。我相信你想要做什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top