c#求助,如何对下列数据进行排序

zhengqian0009 2018-05-16 08:57:54
班级成绩单,有一班二班三班,每个班都有若干学生,每个学生有3科成绩,我想每个班就各科成绩分别得出了个名次。
班级 学生姓名 成绩1 成绩2 成绩3
一班 学生A 99 88 95
一班 学生B 86 95 100
一班 学生C 81 82 93
一班 学生D 97 94 97
一班 学生E 86 80 85
一班 学生F 99 96 87
二班 学生A 93 95 94
二班 学生B 85 81 94
二班 学生C 94 84 84
二班 学生D 96 90 99
二班 学生E 88 92 92
二班 学生F 88 94 96
二班 学生G 80 100 83
二班 学生H 97 87 96
二班 学生I 82 87 85
二班 学生J 95 82 89
二班 学生K 99 83 94
二班 学生L 92 93 96
三班 学生D 87 96 90
三班 学生E 98 85 91
三班 学生F 99 98 99
三班 学生G 87 93 88
三班 学生H 88 93 86
三班 学生I 100 80 92
三班 学生J 84 97 92
三班 学生K 98 80 93
三班 学生L 84 85 92
三班 学生M 80 100 84
三班 学生N 94 80 94

例如
科目1一班成绩排名是学生AFDBEC,二班成绩排名是。。。。。。,三班成绩排名是。。。。;
科目2一班成绩排名是。。。。,二班成绩排名是。。。。,三班成绩排名是。。。。;
科目3一班成绩排名是。。。。,二班成绩排名是。。。。,三班成绩排名是。。。。;

我自己想了很久,通过if判断加循环也能实现,但是没有简便方法。请问大神有没有很好的数据结构存放这些数据,list,listarry,数组这几种我该选哪个
最好给出解决的代码
...全文
923 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengqian0009 2018-06-11
  • 打赏
  • 举报
回复
谢谢各位!结帖晚了点
kangning3797 2018-05-17
  • 打赏
  • 举报
回复
这种排序 直接在数据库里处理好即可? 不用到界面上来排吧???
xuzuning 2018-05-16
  • 打赏
  • 举报
回复
            var d = new[]
{
new {班级="一班", 学生姓名="学生A", 成绩1=99, 成绩2=88, 成绩3=95},
new {班级="一班", 学生姓名="学生B", 成绩1=86, 成绩2=95, 成绩3=100},
new {班级="一班", 学生姓名="学生C", 成绩1=81, 成绩2=82, 成绩3=93},
new {班级="一班", 学生姓名="学生D", 成绩1=97, 成绩2=94, 成绩3=97},
new {班级="一班", 学生姓名="学生E", 成绩1=86, 成绩2=80, 成绩3=85},
new {班级="一班", 学生姓名="学生F", 成绩1=99, 成绩2=96, 成绩3=87},
new {班级="二班", 学生姓名="学生A", 成绩1=93, 成绩2=95, 成绩3=94},
new {班级="二班", 学生姓名="学生B", 成绩1=85, 成绩2=81, 成绩3=94},
new {班级="二班", 学生姓名="学生C", 成绩1=94, 成绩2=84, 成绩3=84},
new {班级="二班", 学生姓名="学生D", 成绩1=96, 成绩2=90, 成绩3=99},
new {班级="二班", 学生姓名="学生E", 成绩1=88, 成绩2=92, 成绩3=92},
new {班级="二班", 学生姓名="学生F", 成绩1=88, 成绩2=94, 成绩3=96},
new {班级="二班", 学生姓名="学生G", 成绩1=80, 成绩2=100, 成绩3=83},
new {班级="二班", 学生姓名="学生H", 成绩1=97, 成绩2=87, 成绩3=96},
new {班级="二班", 学生姓名="学生I", 成绩1=82, 成绩2=87, 成绩3=85},
new {班级="二班", 学生姓名="学生J", 成绩1=95, 成绩2=82, 成绩3=89},
new {班级="二班", 学生姓名="学生K", 成绩1=99, 成绩2=83, 成绩3=94},
new {班级="二班", 学生姓名="学生L", 成绩1=92, 成绩2=93, 成绩3=96},
new {班级="三班", 学生姓名="学生D", 成绩1=87, 成绩2=96, 成绩3=90},
new {班级="三班", 学生姓名="学生E", 成绩1=98, 成绩2=85, 成绩3=91},
new {班级="三班", 学生姓名="学生F", 成绩1=99, 成绩2=98, 成绩3=99},
new {班级="三班", 学生姓名="学生G", 成绩1=87, 成绩2=93, 成绩3=88},
new {班级="三班", 学生姓名="学生H", 成绩1=88, 成绩2=93, 成绩3=86},
new {班级="三班", 学生姓名="学生I", 成绩1=100, 成绩2=80, 成绩3=92},
new {班级="三班", 学生姓名="学生J", 成绩1=84, 成绩2=97, 成绩3=92},
new {班级="三班", 学生姓名="学生K", 成绩1=98, 成绩2=80, 成绩3=93},
new {班级="三班", 学生姓名="学生L", 成绩1=84, 成绩2=85, 成绩3=92},
new {班级="三班", 学生姓名="学生M", 成绩1=80, 成绩2=100, 成绩3=84},
new {班级="三班", 学生姓名="学生N", 成绩1=94, 成绩2=80, 成绩3=94},
};
var r = d.GroupBy(x => x.班级).Select(g => g.OrderByDescending(x => x.成绩1).Select((x, i) => new { 班级 = g.Key, 学生姓名 = x.学生姓名, 成绩1=x.成绩1, 排名 = i }));
foreach (var x in r) foreach(var y in x) Console.WriteLine(y);
cheng2005 2018-05-16
  • 打赏
  • 举报
回复

    public class Info
    {
        public int ClassNum { get; set; }

        public string StuName { get; set; }

        public int PointA { get; set; }
        public int PointB { get; set; }
        public int PointC { get; set; }

    }

            List<Info> items = new List<Info>()
            {
                new Info() {ClassNum = 1,StuName ="张1",PointA = 90,PointB = 100,PointC = 60 },
                new Info() {ClassNum = 1,StuName ="张2",PointA = 89,PointB = 70,PointC = 70 },
                new Info() {ClassNum = 1,StuName ="张3",PointA = 80,PointB = 80,PointC = 80 },
                new Info() {ClassNum = 2,StuName ="李1",PointA = 91,PointB = 60,PointC = 80 },
                new Info() {ClassNum = 2,StuName ="李2",PointA = 92,PointB = 80,PointC = 70 },
                new Info() {ClassNum = 2,StuName ="李3",PointA = 93,PointB = 90,PointC = 55 },
                new Info() {ClassNum = 2,StuName ="李4",PointA = 94,PointB = 30,PointC = 65 },
                new Info() {ClassNum = 3,StuName ="王1",PointA = 66,PointB = 99,PointC = 77 },
                new Info() {ClassNum = 3,StuName ="王2",PointA = 77,PointB = 11,PointC = 88 },
                new Info() {ClassNum = 3,StuName ="王3",PointA = 88,PointB = 22,PointC = 55 },
            };

            var classgroup = items.GroupBy(x => x.ClassNum);

            {
                //A
                var a1 = classgroup.FirstOrDefault(x => x.Key == 1).OrderByDescending(x => x.PointA);
                var a2 = classgroup.FirstOrDefault(x => x.Key == 2).OrderByDescending(x => x.PointA);
                var a3 = classgroup.FirstOrDefault(x => x.Key == 3).OrderByDescending(x => x.PointA);
            }

            {
                //B
                var b1 = classgroup.FirstOrDefault(x => x.Key == 1).OrderByDescending(x => x.PointB);
                var b2 = classgroup.FirstOrDefault(x => x.Key == 2).OrderByDescending(x => x.PointB);
                var b3 = classgroup.FirstOrDefault(x => x.Key == 3).OrderByDescending(x => x.PointB);
            }

            {
                //C
                var c1 = classgroup.FirstOrDefault(x => x.Key == 1).OrderByDescending(x => x.PointC);
                var c2 = classgroup.FirstOrDefault(x => x.Key == 2).OrderByDescending(x => x.PointC);
                var c3 = classgroup.FirstOrDefault(x => x.Key == 3).OrderByDescending(x => x.PointC);
            }
Teln_小凯 2018-05-16
  • 打赏
  • 举报
回复
数据结构的话你直接 名字 科目 班级 成绩 就可以了啊 list.groupby(x=> new {x.班级,x.科目}).orderby(x=>x.成绩) 输出来结果就是 班级1 科目1 张三1 90 班级1 科目1 李四1 80
Teln_小凯 2018-05-16
  • 打赏
  • 举报
回复
List all =new list 所有数据 list allSubject = list.select(x=>x.科目).distinct().tolst() list allClass = list.select(x=>x.班级).distinct().tolst() foreach(var subject in allsubject){ foreach(var class in allClass) { var result = all.where(x=>x.class=class && x.subject==subject).ordedesrby(x=>x.成绩).tolist() 这个科目,这班的成绩大到小 这里输出就行了,格式自己处理了 } }
本人QQ-554433626 2018-05-16
  • 打赏
  • 举报
回复

        private static void Test()
        {
            IList<Model> modelList = new List<Model>
            {
                new Model
                {
                    ClassName = "一班",
                    StudentName = "学生A",
                    Score1 = 99,
                    Score2 = 88,
                    Score3 = 95
                },
                new Model
                {
                    ClassName = "一班",
                    StudentName = "学生B",
                    Score1 = 86,
                    Score2 = 95,
                    Score3 = 100
                },
                new Model
                {
                    ClassName = "一班",
                    StudentName = "学生C",
                    Score1 = 81,
                    Score2 = 82,
                    Score3 = 93
                },
                new Model
                {
                    ClassName = "二班",
                    StudentName = "学生D",
                    Score1 = 96,
                    Score2 = 90,
                    Score3 = 99
                },
                new Model
                {
                    ClassName = "二班",
                    StudentName = "学生E",
                    Score1 = 86,
                    Score2 = 80,
                    Score3 = 85
                },
                new Model
                {
                    ClassName = "二班",
                    StudentName = "学生F",
                    Score1 = 85,
                    Score2 = 80,
                    Score3 = 94
                },
                new Model
                {
                    ClassName = "三班",
                    StudentName = "学生G",
                    Score1 = 96,
                    Score2 = 90,
                    Score3 = 99
                },
                new Model
                {
                    ClassName = "三班",
                    StudentName = "学生H",
                    Score1 = 87,
                    Score2 = 93,
                    Score3 = 88
                },
                new Model
                {
                    ClassName = "三班",
                    StudentName = "学生M",
                    Score1 = 80,
                    Score2 = 100,
                    Score3 = 84
                },
                new Model
                {
                    ClassName = "三班",
                    StudentName = "学生N",
                    Score1 = 94,
                    Score2 = 80,
                    Score3 = 94
                }
            };
            //得到所有班级名
            List<string> cassNameList = modelList.Select(x => x.ClassName).Distinct().ToList();
            //三个科目倒序
            Dictionary<IOrderedEnumerable<Model>, string> allList = new Dictionary<IOrderedEnumerable<Model>, string>
            {
                {modelList.OrderByDescending(t => t.Score1), "科目1"},
                {modelList.OrderByDescending(t => t.Score2), "科目2"},
                {modelList.OrderByDescending(t => t.Score3), "科目3"}
            };
            foreach (var item in allList)
            {
                cassNameList.ForEach(oo =>
                {
                    Console.Write($"{item.Value}{oo}成绩排名是");
                    item.Key.Where(t => t.ClassName == oo).ToList().ForEach(t =>
                    {
                        Console.Write($"{t.StudentName}");
                    });
                    Console.Write(",");
                });
                Console.Write(";");
                Console.WriteLine();
            }
        }

        private class Model
        {
            /// <summary>
            /// 班级名称
            /// </summary>
            public string ClassName { get; set; }

            /// <summary>
            /// 学生名称
            /// </summary>
            public string StudentName { get; set; }

            /// <summary>
            /// 成绩1
            /// </summary>
            public double Score1 { get; set; }

            /// <summary>
            /// 成绩2
            /// </summary>
            public double Score2 { get; set; }

            /// <summary>
            /// 成绩3
            /// </summary>
            public double Score3 { get; set; }
        }
zhengqian0009 2018-05-16
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
先按照班级分组,然后组内排序 这有什么好问的?
对啊,我也知道这样做可以。我想问问有没有特殊的结构能够存储这样类型的数据,不用通过判断循环就能实现,例如list.sort();这样简便一些就能实现的
Teln_小凯 2018-05-16
  • 打赏
  • 举报
回复
用list。 对象里面包含 名字 科目 班级 成绩 然后 找到所有的科目 list.select(x=>x.科目).distinct().tolst() 找到所有的班级 list.select(x=>x.班级).distinct().tolst() 然后循环科目和班级查找就行了 for 科目集合 内循环 for 班级集合 那么这里的数据就是某个科目下 某个班级的list了
cheng2005 2018-05-16
  • 打赏
  • 举报
回复
先按照班级分组,然后组内排序 这有什么好问的?

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧