在C#中将两个字典列表重新排序的最简单方法是什么?

时间:2013-07-18 15:41:53

标签: c# list dictionary webmatrix asp.net-webpages

问题的背景

假设我有一个从SQL Server CE查询编译的以下两个列表(prioSums和contentVals),如下所示:

var queryResults = db.Query(searchQueryString, searchTermsArray);

Dictionary<string, double> prioSums = new Dictionary<string, double>();
Dictionary<string, string> contentVals = new Dictionary<string, string>();
double prioTemp = 0.0;
foreach(var row in queryResults)
{
    string location = row.location;
    double priority = row.priority;

    if (!prioSums.ContainsKey(location))
    {
        prioSums[location] = 0.0;
    }

    if (!contentVals.ContainsKey(location))
    {
        contentVals[location] = row.value;
        prioTemp = priority;
    }

    if (prioTemp < priority)
    {
        contentVals[location] = row.value;
    }

    prioSums[location] += priority;
}

查询本身非常大,非常动态编译,并且超出了这个问题的范围,所以我只是说它返回包含优先级,文本值和位置的行。

使用上面的代码,我能够获得一个列表(prioSums),它总结了每个位置的所有优先级(不允许在位置[key]本身上重复,即使该位置的重复在查询结果中),以及另一个列表(contentVals),用于保存具有最高优先级的位置的值,再次使用位置作为键。

所有这些我已经完成并且效果很好。我可以迭代这两个列表并显示我想要的信息......

问题

...现在我需要首先将这些列表重新排序,并将优先级最高(或优先级的总和存储为prioSums中的值)。

我试图考虑使用具有三个属性的实例化类作为其他人给出的建议,但我似乎无法根据我的WebMatrix C#.net-来了解我的大脑是如何工作的。网页环境。我知道如何从当前.cs文件中的.cshtml文件调用一个类,没问题,但是我从来没有通过实例化一个类来使它成为一个对象(抱歉,还是新的一些更复杂的C#逻辑/方法论。)

任何人都可以建议如何实现这一目标,或者展示一种更容易(至少更容易理解)的方式吗?总之,我真正需要的是这两个列表按prioSums中的值从最高到最低排序。

注意

如果我没有提供足够的信息,请原谅我。如果提供更多信息,请不要犹豫。

此外,有关此问题的更多信息或背景信息,您可以在此处查看我之前的问题:Is there any way to loop through my sql results and store certain name/value pairs elsewhere in C#?

1 个答案:

答案 0 :(得分:1)

我不知道你想要的结果,但你可以尝试一下:

var result = from p in prioSums
          orderby p.Value descending
          select new { location = p.Key, priority = p.Value, value = contentVals[p.Key] };