猿问

将一个值与排序字典中的下一个值进行比较

我有一个排序字典,名称为键,标记为值。


Dictionary<string,int> diM = new Dictionary<string,int>();

另一个字典来存储各个学生所花费的时间。


Dictionary<string,int> diT = new Dictionary<string,int>();

现在,如果两个学生的分数相同,则根据所用时间排名。


var marks = from pair in diM

            orderby pair.Value descending

            select pair;

int j=0;


foreach (KeyValuePair<string, int> pair in marks)

{

    j++;

    Console.WriteLine("{0} {1}",j, pair.Key);

}

现在,如果一个学生的分数与下一个学生的分数相等(如排序字典),那么应该输出时间更少的学生。


慕勒3428872
浏览 117回答 1
1回答

人到中年有点甜

首先,我建议不要使用字典来完成这项任务。创建一个具有名称、标记和时间属性的类。就像是:public class TestResult{&nbsp; &nbsp; public string Name { get; set; }&nbsp; &nbsp; public int Grade { get; set; }&nbsp; &nbsp; public TimeSpan Time { get; set; }}然后持有该类型的列表。每当您有两个单独的集合时,您需要以某种方式保持同步 - 怀疑设计中可能存在问题。至于实际问题,使用Linq将两个字典按键连接起来。完成此操作后,您可以按标记排序结果,然后按时间排序:var result = from mark in diM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;join time in diT on mark.Key equals time.Key&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;orderby mark.Value descending, time.Value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select new { Name = mark.Key, Grade = mark.Value, Time = time.Value };
随时随地看视频慕课网APP
我要回答