什么';这是在C#中将两个字典列表重新排序在一起的最简单方法
本文关键字:两个 列表 新排序 字典 方法 最简单 在一起 排序 什么 | 更新日期: 2023-09-27 18:23:44
问题背景
假设我有以下两个列表(prioSums和contentVals),它们是从SQL Server CE查询中编译的,如下所示:
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]本身上重复,即使查询结果中有该位置的重复),以及另一个列表,它再次使用该位置作为关键字,保存具有最高优先级的位置的值。
所有这些我都完成了,而且效果非常好。我可以迭代这两个列表并显示我想要的信息,但是。。。
问题
现在,我需要首先将这些列表与最高优先级(或存储为prioSums中值的优先级总和)一起重新排序。
我一直在绞尽脑汁,试图按照其他人的建议使用一个具有三个属性的实例化类,但考虑到我的WebMatrix C#.net网页环境,我似乎无法思考这将如何工作。我知道如何从当前.cshtml
文件的.cs
文件调用类,没问题,但我以前从未通过实例化类使其成为对象来实现这一点(对不起,对于一些更复杂的C#逻辑/方法论来说,这仍然是新的)。
有人能建议如何做到这一点吗,或者展示一种更容易(至少更容易理解)的方法吗?简言之,我真正需要的只是这两个列表按照prioSums中的值从高到低排列在一起。
注意
如果我没有提供足够的信息,请原谅我。如果需要提供更多,请毫不犹豫地询问。
此外,有关这个问题的更多信息或背景信息,您可以在这里查看我之前的问题:是否有任何方法可以循环我的sql结果并将某些名称/值对存储在C#的其他位置?
我不知道这是否是你想要的结果,但你可以试试:
var result = from p in prioSums
orderby p.Value descending
select new { location = p.Key, priority = p.Value, value = contentVals[p.Key] };