6

私は、2つの文字列キーでインデックス付けされた数値の行列を格納する必要があるプロジェクトに取り組んでいます。マトリックスはギザギザではありません。つまり、任意の行に列キーが存在する場合は、すべての行に存在する必要があります。同様に、行キーがいずれかの列に存在する場合は、すべての列に存在する必要があります。

これを表現する明白な方法は、連想配列の連想配列を使用することですが、これは厄介で非効率的であり、ギザギザのないプロパティを強制しません。人気のあるプログラミング言語は、言語に組み込まれている、または標準ライブラリの一部として関連付けられたマトリックスを提供していますか?もしそうなら、APIと実装レベルの両方でどのように機能しますか?このプロジェクトではPythonとDを使用していますが、APIを調べて、PythonまたはDで同様のものを実装するための最良の方法を見つけることができるため、他の言語の例も引き続き役立ちます。

4

3 に答える 3

2

標準の行列を使用するだけでなく、2つの辞書を用意するのはなぜですか。1つは行キーを行インデックスに変換し、もう1つは列キーを列インデックスに変換します。このようにかなり簡単に機能する独自の構造を作成できると思います。マトリックスと2つの辞書を含むクラスを作成し、そこから移動します。

于 2010-02-11T19:53:27.493 に答える
0

Python用のlarryモジュールが最近リリースされました。私はそれがあなたが望むことをすることを信じています。

于 2010-02-11T20:54:16.240 に答える
0

Pythonでは、2つの文字列のタプルでインデックス付けされた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 に答える