Я работаю над проектом, где я должен сохранить матрицу чисел, индексированных двумя строковыми ключами. Матрица не является зубчатой, т.е. если ключ столбца существует для какой-либо строки затем, это должно существовать для всех строк. Точно так же, если ключ строки существует для какого-либо столбца затем, он должен существовать для всех столбцов.
Очевидный способ выразить это с ассоциативным массивом ассоциативных массивов, но это является и неловким и неэффективным, и он не осуществляет свойство незубчатости. Какие-либо популярные языки программирования обеспечивают ассоциативную матрицу, или встроенную в язык или как часть их стандартных библиотек? Если так, как они работают, и на уровне API и на уровне реализации? Я использую Python и D для этого проекта, но примеры на других языках все еще были бы полезны, потому что я смогу посмотреть на API и выяснить лучший способ реализовать что-то подобное в Python или D.
Почему бы просто не использовать стандартную матрицу, а иметь два словаря: один преобразует ключи строк в индексы строк, а другой преобразует ключи столбцов в столбцы индексы. Я думаю, вы можете создать свою собственную структуру, которая будет работать таким образом довольно легко. Вы просто создаете класс, содержащий матрицу и два словаря, и переходите оттуда.
Возможно, вы вызываете функцию (прямо или косвенно) из конструктора базового класса, который сам не имеет этой функции.
Возможно, где-то есть сломанный литер (например, переосмыслить _ привести
указателя, когда задействовано несколько наследований), и вы смотрите на таблицу vtable для неправильного класса.
Возможно (но маловероятно), вы каким-то образом уничтожили таблицу vtable.
Является ли указатель на функцию нулевым только для этого объекта или для всех других объектов того же типа? Если первый, то указатель vtable сломан, и вы смотрите не туда. Если последний, то разбивается сам vtable.
-121--4817568-Другим возможным решением является использование ViewFlipper или ViewSwitcher в качестве раздела "Content", в который включаются различные типы содержимого, между которыми требуется переключиться, и только задание представления, которое требуется отобразить (можно также выполнять анимацию на flip/switch). Недостатком является то, что содержимое должно быть добавлено в основной макет, который каждый вид является дочерним по отношению к ViewFlipper/ViewSwitcher (может использоваться или также для сохранения макетов в отдельных XML-файлах).
Делегирование рендеринга коммутируемого содержимого другому действию не является таким прямым. TabHost/TabWidget допускает, что, где область содержимого хоста табуляции создается из другого действия. В качестве примера можно использовать код Tab, если это необходимо.
-121--3076001-В Python можно индексировать дикт с помощью кортежа из двух строк, например
>>> 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}
Если вы хотите обеспечить, чтобы разрешались только ключи в известном наборе, то я предлагаю подклассифицировать dict для добавления проверки.
Недавно был выпущен модуль larry для Python. Я верю, что он делает то, что вы хотите.