Сортировка, поиск по словарю в C # - PullRequest
0 голосов
/ 16 июня 2011

У меня есть словарь, словарь списка продуктов.Этот список продуктов может иметь сотни продуктов.Строковый ключ - это номер продукта. Я хочу получить некоторые конкретные продукты по номеру продукта (ключу), у меня есть список ключей, например, 64290,64287,59261,50990,50975,50897,68494,68495,51015,68493.есть только предметы с вышеуказанными ключами и в том же порядке, любая идея, как я могу это сделать.?Если есть какая-либо структура данных заказа, которая может работать лучше в этом сценарии?

Вот полный сценарий:

Вот полный сценарий: я получаю XML от сервера с информацией о продуктеформат этого XMl:

<key>64285</key><string>productname[SEPERATOR]product description</string>  <key>64285</key><string>productname[SEPERATOR]product description</string><key>64285</key><string>productname[SEPERATOR]product description</string>

Теперь этот XML не содержит все подробности продукта (например, у этого продукта нет рейтинга продукта или цвета продукта). Мне нужно отсортировать и выполнить поиск по рейтингу продукта и продукту.Цвет.Для этого я получаю еще один XMl, который имеет порядок ключей продуктов по рейтингу.

<dict>  <key>rating</key>   <string>64285,68495,68494,64228,68491.......</string> <key>price</key>   <string>68493,64234,50863,64236,64223,....</string> </dict>

Похоже, мне нужно искать продукт с цветом "Белый". Для этого я получаю XMl со списком продуктов, которыев белом цвете,

Ответы [ 4 ]

1 голос
/ 16 июня 2011

Словарь не имеет порядка.Может быть, вы можете сделать список, который содержит элементы в порядке.

List<Product> result = new List<Product>();
var keys = new [] {64290,64287,59261,50990,50975,50897,68494,68495,51015,68493};
foreach (var key in keys)
{
    result.Add(listOfProducts[key]);
}
return result;
0 голосов
/ 16 июня 2011

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

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

Редактировать:

Вот пример:

var Products = new [] 
{
    new { Key = "64290", Name = "P1" },
    new { Key = "64290", Name = "P2" },
    new { Key = "64287", Name = "P3" },
    new { Key = "59261", Name = "P4" },
    new { Key = "59261", Name = "P5" },
    new { Key = "64290", Name = "P6" },
    new { Key =" 64290", Name = "P7" },
    new { Key = "51015", Name = "P8" },
    new { Key = "51015", Name = "P9" }
};

Lookup<string,string> products = ( Lookup<string,string> ) Products.ToLookup
(
    p => p.Key, p => p.Name
);

foreach( IGrouping<string,string> g in products )
{
    Console.WriteLine( g.Key );

    foreach( string product in g )
    {
        Console.WriteLine( String.Concat( "\t", product ) );
    }
}

Выход:

64290 P1 P2 P6 P7 64287 P3 59261 P4 P5 51015 P8 P9

0 голосов
/ 16 июня 2011

Вы можете использовать отдельный массив / список var keyList = new List<int>(); для хранения ключей в нужном вам порядке. Таким образом, вы можете перебирать keyList и выполнять поиск значения в исходном словаре.

0 голосов
/ 16 июня 2011

Вы смотрели на SortedDictionary ?

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

или попробуйте Очередь?

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

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