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

原创 2015年11月18日 10:17:14

当然,这篇文章主要介绍怎么自定义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">能够在此算法以后的调用,如下图,实现中文的提示,没什么特别的意义。


版权声明:本文为博主原创文章,未经博主允许,欢迎随意转载,标好作者+原文地址就可以了!感谢欣赏!觉得好请回个贴! 举报

相关文章推荐

C# List.Sort()自定义比较方法排序

要用下面的routeName进行排序 类 public class BusRoute { private string routeName; private int st...

List<T>采用delegate快速实现排序、查找等操作

List采用delegate快速实现排序、查找等操作       .NET中的List非常方便,但是很遗憾得是没有自带更方便的一些排序、查找函数。比如说,Sort()和Find()方法都包含在Lis...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C# Sort排序

List 的Sort方法排序有三种结果 1,0,-1分别表示大于,等于,小于。 1.对于数值类型的List (List),直接使用Sort进行排序。 List scoreList=new List...

C#泛型-使用委托的Sort排序方法

 C#泛型-使用委托的Sort排序方法 泛型的排序有3种方法,分别是: 1、List.Sort(),只能在集合元素实现了IComparable泛型接口时使用 2、List.Sort...
  • num197
  • num197
  • 2015-06-01 18:06
  • 1482

C# List<T>排序总结

这里有很多种方法对List进行排序,本文总结了三种方法,但多种实现。1.对基础类型排序方法一:调用sort方法,如果需要降序,进行反转:List list = new List(); list.Sor...

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

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

[LIST]ArrayList的自定义排序方法

ArrayList的自定义排序方法Java.util.Collections.sort(List list)与Comparable,Comparator 接口 调用java.util.Collecti...

C++洗牌算法

1、使用标准库中的random_shuffle()函数实现很简单,代码如下: int main() {     vectorint> s_stl;     for&...

洗牌算法shuffle

对这个问题的研究始于一次在群里看到朋友发的洗牌面试题。当时也不知道具体的解法如何,于是随口回了一句:每次从剩下的数字中随机一个。过后找相关资料了解了下,洗牌算法大致有3种,按发明时间先后顺序如下: ...

洗牌算法

题:.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。 分析:54张牌分别用0到53的数值表示并存储在一个整形数组里,数组下标(即初始数值)代表纸牌所在的位置,如boke[0]的值即为0。这样...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)