2016-07-14 7 views
-2

文法パラダイムを格納するための適切なデータ構造について考えようとしています。私は連想配列のようなものを望むが、次元数は任意である。単純なケースでは、データ構造を考えるのは簡単です。次のようなパラダイムの2次元がある場合は...ユーザー指定の次元を持つ配列(または連想配列)

性別(男性的、女性らしい、中性)

ケース(主格、対格、与格、属格)

...それはC++でハッシュマップ、またはPHPの連想配列を使用することが理にかなって:

$value['Masculine']['Accusative'] = 'foo'; 
$value['Neuter']['Dative'] = 'foo'; 

問題は、所与の言語、寸法」の任意の数の(確かに上限がありますが、その前に何があるのか​​わかりません)ユーザーが重要な値を指定し、それらを動的に変更できるようにします。

このような柔軟性を持つデータ構造はありますか、それとも特別なクラスなどで自分自身を作成する必要がありますか?

+1

だから問題は何ですか? –

+0

あなたは(Gender、Case)から何かを関連付けるのではなく、(Gender、Case)からSomethingにマップしてもよろしいですか? –

+0

配列には、phpのメモリ制限が何であっても、スカラー値を持つ任意の数の次元がキーとしてすでに存在します。 –

答えて

0

lorroの回答と建物に続き、this questionには、ベクトルを持つhasデータ構造を作成するか、またはキーとして設定することができます。

ここにQtアプローチがあります。おそらく、標準ツールと同様に動作します。

QHash< QSet<QString> , QString > paradigm; 

QSet<QString> descriptor1; 
descriptor1 << "Nominative" << "Masculine"; 
paradigm[descriptor1] = "foo"; 

QSet<QString> descriptor2; 
descriptor2 << "Neuter" << "Dative"; 
paradigm[descriptor2] = "bar"; 

QSet<QString> descriptor3; 
descriptor3 << "Feminine" << "Genitive"; 

qDebug() << paradigm.value(descriptor1, "No value") 
     << paradigm.value(descriptor2, "No value") 
     << paradigm.value(descriptor3, "No value"); 

出力:

"foo" "bar" "No value" 

PHP配列can only be keyed by strings and integersが、しかし、そうPHPは異なるアプローチを必要とするであろう。

関連する問題