【问题标题】:Array (or associative array) with user-specified dimensions具有用户指定维度的数组(或关联数组)
【发布时间】:2016-11-17 23:44:51
【问题描述】:

我正在尝试考虑存储语法范式的适当数据结构。我想要一个类似关联数组的东西,但具有任意数量的维度。在一个简单的情况下,很容易想到数据结构。如果范式的两个维度如下……

性别(男性、女性、中性)

格(主格、宾格、与格、属格)

...那么在 C++ 中使用哈希映射或在 PHP 中使用关联数组是有意义的:

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

问题在于,对于给定的语言,任何数量的“维度”都可能很重要。 (肯定有一个上限,但我不知道那是什么。)我希望用户指定重要的值是什么,并且能够动态更改它们。

是否有任何类型的数据结构具有这种灵活性,或者我是否需要使用特殊的类或类似的东西创建自己的?

【问题讨论】:

  • 那么问题是什么?
  • 您确定要从 (Gender, Case) 映射到 Something,而不是将每个 Something 与 (Gender, Case) 关联吗?
  • 数组已经有任意数量的维度和任意标量值作为键,无论 php 的内存限制是多少。
  • 可能最简单的方法就是这样:std::map<std::vector<std::string>, std::string>,虽然语法会有所不同,比如:v[{"a", "b", "c"}] = "d";
  • 可以用伪代码写你想达到什么目的?

标签: php c++ arrays data-structures hash


【解决方案1】:

按照 lorro 的回答并以 this question 为基础,可以通过创建带有向量或设置为键的 has 数据结构来完成。

这是一个 Qt 方法;大概它与 std 工具的工作方式类似。

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 需要不同的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2016-05-28
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多