Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在C#中,将两个字典列表重新排序最简单的方法是什么?_C#_List_Dictionary_Webmatrix_Asp.net Webpages - Fatal编程技术网

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

什么';在C#中,将两个字典列表重新排序最简单的方法是什么?,c#,list,dictionary,webmatrix,asp.net-webpages,C#,List,Dictionary,Webmatrix,Asp.net Webpages,问题背景 假设我使用SQL Server CE查询编译了以下两个列表(priosum和contentVals),如下所示: var queryResults = db.Query(searchQueryString, searchTermsArray); Dictionary<string, double> prioSums = new Dictionary<string, double>(); Dictionary<string, string> cont

问题背景

假设我使用SQL Server CE查询编译了以下两个列表(priosum和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;
}
var queryResults=db.Query(searchQueryString,searchTermsArray);
字典优先级=新字典();
字典contentVals=新字典();
双prioTemp=0.0;
foreach(queryResults中的变量行)
{
字符串位置=row.location;
双优先级=row.priority;
如果(!prioSums.ContainsKey(位置))
{
prioSums[位置]=0.0;
}
如果(!contentVals.ContainsKey(位置))
{
contentVals[location]=行.value;
优先级=优先级;
}
如果(优先级<优先级)
{
contentVals[location]=行.value;
}
优先级[位置]+=优先级;
}
查询本身非常大,非常动态地编译,实际上超出了这个问题的范围,所以我只想说它返回的行包括优先级、文本值和位置

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

所有这些我都做到了,而且效果很好。我可以反复浏览这两个列表并显示我想要的信息,但是

问题

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

我绞尽脑汁想使用一个具有三个属性的实例化类,这是别人给我的建议,但考虑到我的WebMatrix C#.net网页环境,我似乎不知道该如何工作。我知道如何从当前的
.cshtml
文件中调用
.cs
文件中的类,没问题,但我以前从未通过实例化类使其成为对象来实现这一点(对不起,对于一些更复杂的C逻辑/方法学来说,这仍然是新的)

有人能建议如何实现这一点,或者展示一种更简单(至少更容易理解)的方式吗?简言之,我真正需要的是这两个列表按priosum值从高到低排列在一起

注意

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


另外,有关此问题的更多信息或背景,您可以在此处查看我之前的问题:

我不知道这是否是您想要的结果,但您可以尝试一下:

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

没有那么清楚,1个列表有优先级和位置,第二个列表有值和位置?还有新的集合?dictionary(double是优先级,string是contentvals中的值)?@terrybozzio对清晰度问题表示抱歉,请查看下面的链接以了解更多信息,因为这是我几天前提出的一个问题,直接导致了这一点@terrybozzio最终,我需要为每个“项”提供三样东西:1)位置2)查询返回的所有位置的所有优先级总和(位置不会在列表中重复),以及3)查询返回的值在查询结果中具有最高优先级的位置的文本值。然而,可能没有必要了解所有这些。你需要知道的(我想)是我有两个清单。每个列表都使用位置作为键,一个列表的优先级和作为值,另一个列表的文本值作为列表值。@terrybozzio说实话,我已经有了它本身。我需要的是首先将这两个列表与prioSums的最高值一起重新排序。以后如何访问这三个值?对不起,我对LINQAlso很陌生,这是在创造什么?也就是说,使用行
创建的内容选择new{location=p.Key,priority=p.Value,Value=contentVals[p.Key]
这似乎是一个明智的答案,因为我可以看到所有数据是如何被访问的,但我不确定新的有序值存储在哪里以供以后参考。我想循环遍历结果并一次显示一个(而不是将它们存储在单独的位置)可能也有用。天哪!我想我第一次尝试就用上了。我在上面提供的代码之后使用了它,只是在页面上显示结果:
foreach(var doodad in result){@doodad.location | |@doodad.priority | |@doodad.value
而且它似乎完全起作用了。我认为结果变成了一个具有3个属性的对象?我做得对吗?对不起,不见了……结果将是一个“列表”(一个“WhereSelectEnumerableTerator”),它是用匿名类型创建的,在循环中,每个项目都是“doodad”,这意味着结果变成了一个包含n个对象的列表(在您的例子中是“doodad”)),每个都具有所需的3个属性。