关闭

【C#】洗牌算法、利用delegate自定义list的sort排序方法、summary注释

标签: C#容器类洗牌排序注释
2033人阅读 评论(0) 收藏 举报
分类:

当然,这篇文章主要介绍怎么自定义C#中一个List的排序。而不是介绍什么delegate深奥的概念。

解决的问题主要是,student是一个含有int num,int class_num,string name三个类成员的类

假设有一个存放student类的数组,存着3个student元素,要按照int class_num与string name来排序如下图:


具体的代码如下:

using System;
using System.Collections.Generic;

class Student
{
    public int num;
    public int class_num;
    public string name;
    public Student(int num, int class_num, string name)
    {
        this.num = num;
        this.class_num = class_num;
        this.name = name;
    }
}
class ClassListSort
{
    /// <summary>
    /// 打乱学生动态数组student_list
    /// </summary>
    /// <param name="student_list">学生动态数组student_list</param>  
    public static List<Student> shuffle_list(List<Student> list)
    {
        int currentIndex;
        Student temp;
        for (int i = 0; i < list.Count; i++)
        {
            currentIndex = new Random().Next(0, list.Count - i);
            temp = list[currentIndex];
            list[currentIndex] = list[list.Count - 1 - i];
            list[list.Count - 1 - i] = temp;
        }
        return list;
    }

    /// <summary>
    /// 打印学生动态数组student_list
    /// </summary>
    /// <param name="student_list">学生动态数组student_list</param>    
    public static void print_student_list(List<Student> student_list)
    {
        Console.WriteLine("学号,班级,姓名");
        foreach (Student student in student_list)
        {
            Console.WriteLine(student.num + "," + student.class_num + "," + student.name);
        }

    }

    public static void Main(string[] args)
    {
        List<Student> student_list = new List<Student>();
        student_list.Add(new Student(1, 2, "aaav"));
        student_list.Add(new Student(2, 1, "ddde"));
        student_list.Add(new Student(3, 3, "cccs"));
        print_student_list(student_list);

        Console.WriteLine("打乱后的List为:");
        student_list = shuffle_list(student_list);
        print_student_list(student_list);

        Console.WriteLine("按班级编号排序后的List为:");
        student_list.Sort(
            delegate(Student student1, Student student2)
            {
                return student1.class_num < student2.class_num ? -1 : 1;
            });
        print_student_list(student_list);

        Console.WriteLine("按姓名的首字母排序后的List为:");
        student_list.Sort(
            delegate(Student student1, Student student2)
            {
                if (student1.name.CompareTo(student2.name) > 0)
                {
                    return 1;
                }
                else
                {
                    return -1;
                }
            });
        print_student_list(student_list);
    }
}

开始利用洗牌算法打乱List的排序,C#的List中没有像Java那些封装好的shuffle算法,《【Java】利用Collections类下的shuffle洗牌方法改进在一定的范围内产生不重复的随机数》(点击打开链接),只好自己利用随机数,随机交换List中的元素,从而实现List的shuffle洗牌。

关键是对list带有的sort方法进行重写,原本一个存int的list直接调用sort()就会自动按int从小到大进行排序,然而对于一个存类的数组,就应该利用delegate自定义list的sort排序方法,这个delegate与《【Java】Collections中sort方法Comparator的重写》(点击打开链接)、《【JavaScript】利用sort()函数与文件碎片实现表格的前端排序,兼容IE6原生态》(点击打开链接)中的同样,两个变量是抽象的前者与后者,如果返回-1则定义前者少于后者,返回1则定义前者大于后者。

而C#中的注释///<summary>、/// <param name="student_list">能够在此算法以后的调用,如下图,实现中文的提示,没什么特别的意义。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【C#】洗牌算法、利用delegate自定义list的sort排序方法、summary注释

当然,这篇文章主要介绍怎么自定义C#中一个List的排序。而不是介绍什么delegate深奥的概念。 解决的问题主要是,student是一个含有int num,int class_num,strin...
  • yongh701
  • yongh701
  • 2015-11-18 10:17
  • 2033

C++ 中list容器,自定义sort排序规则,stl中sort自定义排序规则

最近做游戏开发,其中容器(背包,仓库)中的整理功能需要对容器中的所有道具按照一定的规则来进行整理和排序, 这里有两种解决方案,一是重载list.sort()的操作运算符,二是通过list.sort(...
  • jcracker
  • jcracker
  • 2013-03-22 13:05
  • 13603

自定义类型struct的排序-sort函数

C++中sort函数关于自定义类型struct的排序使用方法。 sort函数在头文件algorithm中,在MSDN中的定义如下: 第一种: template void sort(RanIt firs...
  • u013011270
  • u013011270
  • 2013-12-01 14:23
  • 5249

list 的自定义排序 Collection.sort()方法个人学习总结

对于list类型的排序方法:利用Collection.sort()方法   sort()方法默认的是自然排序(也就是升序) 如果想要自定义排序如降序,则重新实现的sort()方法中的比较器。 自定...
  • M_200
  • M_200
  • 2017-02-09 15:55
  • 1374

java Collections.sort()实现List排序的默认方法和自定义方法

1.java提供的默认list排序方法 例子程序如下: package outputMml2; import java.text.Collator; import java.util.Arr...
  • abcwywht
  • abcwywht
  • 2017-02-04 09:55
  • 261

java Collections.sort()实现List排序的默认方法和自定义方法

java Collections.sort()实现List排序的默认方法和自定义方法1.java提供的默认list排序方法主要代码:List list = new ArrayList();list.a...
  • qq_33096743
  • qq_33096743
  • 2017-07-26 09:47
  • 260

java Collections.sort()实现List排序的默认方法和自定义方法

感谢有奉献精神的人 转自:http://www.cnblogs.com/liuyuanyuanGOGO/p/java_collections.html 1.java提供的默认list...
  • zhangliao613
  • zhangliao613
  • 2015-08-12 14:58
  • 483

java Collections.sort()实现List排序的默认方法和自定义方法

1.java提供的默认list排序方法 主要代码: List list = new ArrayList();list.add("刘媛媛"); list.add("王硕"); list.add(...
  • chang_p_x
  • chang_p_x
  • 2017-06-13 11:44
  • 112

JAVA中Collections.sort()实现List排序的公共方法和自定义方法

本文是受开源中国中的一篇文章启发而写(找不到连接了,所以暂时木法贴出来,一旦找到立马贴出来),个别内容参考了开源中国会员的讨论,感谢! 1.Java提供的默认list排序方法 主要代码: ...
  • qq_34120041
  • qq_34120041
  • 2016-12-12 14:42
  • 116

java Collections.sort()实现List排序的默认方法和自定义方法

1.java提供的默认list排序方法 主要代码: List list = new ArrayList();list.add("刘媛媛"); list.add("王硕"); list.add(...
  • fly_to_north
  • fly_to_north
  • 2015-04-26 18:49
  • 241
    个人资料
    • 访问:1855113次
    • 积分:25053
    • 等级:
    • 排名:第289名
    • 原创:750篇
    • 转载:0篇
    • 译文:0篇
    • 评论:368条
    文章分类
    【备注】博文GIF动画的录制方法
    先用屏幕录制软件Freez Screen Video Capture录制屏幕,再把得到的AVI,利用GIF Movie Gear转化成GIF
    【友情链接】亲笔小说