Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# - Fatal编程技术网

C# 比较排序字典中的一个值和下一个值

C# 比较排序字典中的一个值和下一个值,c#,C#,我有一个分类字典,名字作为键,标记作为值 Dictionary<string,int> diM = new Dictionary<string,int>(); Dictionary diM=newdictionary(); 另一本字典用来存储各自学生所用的时间 Dictionary<string,int> diT = new Dictionary<string,int>(); Dictionary diT=new Dictionary();

我有一个分类字典,名字作为键,标记作为值

Dictionary<string,int> diM = new Dictionary<string,int>();
Dictionary diM=newdictionary();
另一本字典用来存储各自学生所用的时间

Dictionary<string,int> diT = new Dictionary<string,int>();
Dictionary diT=new Dictionary();
现在,如果两个学生的分数相同,则根据所用时间进行排名

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);
}
var marks=来自diM中的配对
按对排序。值递减
选择配对;
int j=0;
foreach(标记中的KeyValuePair对)
{
j++;
WriteLine(“{0}{1}”,j,pair.Key);
}

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

首先,我建议不要使用词典来完成此任务。创建一个具有名称、标记和时间属性的类。比如:

public class TestResult
{
    public string Name { get; set; }
    public int Grade { get; set; }
    public TimeSpan Time { get; set; }
}
然后保存该类型的列表。每当你有两个独立的集合,你需要保持同步-怀疑设计中可能有问题


对于实际问题,使用Linq键连接两个字典。完成此操作后,您可以按标记和时间排序结果:

var result = from mark in diM
             join time in diT on mark.Key equals time.Key
             orderby mark.Value descending, time.Value
             select new { Name = mark.Key, Grade = mark.Value, Time = time.Value };

第一:欢迎来到堆栈溢出!第二:你的问题措辞有点矛盾。“如果一个学生的分数与下一个相等,那么分数较少的学生应该被输出”如果两个学生的名字相同会发生什么。密钥应该是唯一的。试着使用studenId或类似的工具进行一些更正。这些词典不是“分类词典”。它们只是一本普通的字典:)如果它是“耗时的”,那么
TimeSpan
可能比
DateTime
@Damien\u不信者更受欢迎-这是真的:)谢谢你的回答!!上述Linq将同时考虑时间和标记,但只有在标记相同时才应比较时间。@ShaniBhati-它将首先按标记排序。那么,只有在两个标记相同的情况下,时间才重要。