排序,在C#中搜索字典

| 我有一个字典,字典listOfProducts。 该产品列表可以包含数百种产品。 字符串键是产品编号 我想通过产品编号(密钥)获得一些特定的产品, 我有一个钥匙清单,例如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不包含所有产品详细信息(例如,该产品不具有Product Rating或Product Color) 我需要按产品等级和产品颜色进行排序和搜索。 为此,我得到另一个XMl,其产品密钥按Rating排序。
<dict>  <key>rating</key>   <string>64285,68495,68494,64228,68491.......</string> <key>price</key>   <string>68493,64234,50863,64236,64223,....</string> </dict>
类似地,我必须搜索颜色为“白色”的产品 为此,我得到带有清单的XMl白色产品,     
已邀请:
        字典没有顺序。也许您可以创建一个包含顺序元素的列表。
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;
    
        您可以使用单独的数组/列表
var keyList = new List<int>();
以所需的顺序存储键,这样就可以遍历
keyList
并在原始Dictionary中查找值。     
        您看过SortedDictionary吗? 或者,我认为您不能依赖字典中项目的顺序,但是可以在对象中实现IComparable或IComparer接口,然后使用它们进行排序和搜索。 还是尝试排队? 您能否在问题的上下文中添加更多详细信息,如果我们知道您为什么要努力实现自己的要求,我将使其变得更容易。     
        我相信“查找”可能是您要查找的集合,因为您正在将一个键映射到许多可能的值(如果我没看错的话)。 您可以在创建查找或从中检索值时对所需的条目进行排序。 编辑: 这是一个例子:
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     

要回复问题请先登录注册