Список словарей (поисковая оптимизация, C #) - PullRequest
0 голосов
/ 23 января 2012

У меня есть список словарей, List<Dictionary<String,Object>>.Ключ является идентификатором некоторой абстрактной записи.Эти словари приходят из разных мест.Размер каждого словаря находится в диапазоне [0, 1000].

Все словари содержат уникальные ключи.После накопления некоторых словарей я должен выполнить поиск по ключу.Это может быть сделано путем итерации списка и вызова метода поиска для каждого словаря или для копирования всех словарей в один.Эти подходы не предлагают очень хорошую производительность.Меня интересуют способы оптимизации этой задачи.

Редактировать: Спасибо, ребята!Может быть, я изменю метод накопления и в результате устраню саму проблему!

Ответы [ 4 ]

1 голос
/ 23 января 2012

Похоже, у вас есть много словарей для "ускорения" (допущения мотивов) поиска, которые ограничены определенными типами "абстрактных записей".

Вы можете обойтись одним единственным словарем, но наограниченный поиск проверяет результат, требуется ли абстрактный тип записи после его нахождения.Вместо того, чтобы поддерживать один словарь для каждого абстрактного типа записи, как в настоящее время.

1 голос
/ 23 января 2012

Если существует любой способ локализации интересующего словаря путем указания key, вы можете попытаться создать таблицу перекрестных ассоциаций, в которой вы можете попытатьсясоответствует key до dictionary.

Если нет, imho, не вижу других опций, которые просто повторяют коллекцию и запрашивают key, возможно, используют стандартные for и , а не более приятное кодирование linq.

1 голос
/ 23 января 2012

В дополнение к тому, что сказал Джон, есть API, называемый PowerCollections, который содержит MultiDictionary.Если моя память не повреждена, я полагаю, вы можете использовать это для указанной цели.

http://powercollections.codeplex.com/discussions/242163

1 голос
/ 23 января 2012

Ожидаете ли вы, что после начального этапа заполнения будет много ключевых выборок?Если так, объедините все в один словарь.Если вы будете делать только несколько выборок, я не вижу, как вы могли бы справиться лучше, чем спрашивать каждый словарь.

Конечно, вы можете создать гибридный подход: создатьновый (изначально пустой) словарь для объединенных результатов и заполните его, когда вас просят о ключах - просматривая все остальное каждый раз, когда вас просят о ключе, которого еще нет в вашем «большом» словаре.

Нет ли способа предсказать, какой словарь будет иметь определенный ключ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...