Как сделать сортировку с использованием делегата сравнения на строковом свойстве класса - PullRequest
0 голосов
/ 31 мая 2018

вот мой код.Я пытаюсь сделать сравнение с помощью делегата сравнения. (В Visual Studio. .Net core).

using System;
using System.Collections.Generic;
namespace comparisionProject
{
    public class student
    {
        public int SId { get; set; }
        public string name { get; set; }
        public int FullMarks { get; set; }=600;
        public int Marks { get; set; }

    }

    public class tester
    {
        public static int CompareNames(student std1, student std2)
        {
            return std1.name.CompareTo(std1.name);
        }
        static void Main(string[] args)
        {
            student s1 = new student(){SId=101 , name = "kalu",Marks = 456 };
            student s2 = new student(){SId = 102, name = "balu", Marks = 562};
            student s3 = new student(){SId = 103, name= "golu", Marks = 432};
            student s4 = new student(){SId = 104, name= "aalu", Marks = 432};
            List<student> studentList = new List<student>(){s1,s2,s3,s4};
            Comparison<student> stdCompareDelgt = new Comparison<student>(CompareNames);
            studentList.Sort(stdCompareDelgt);
            foreach (student item in studentList)
            {
                System.Console.WriteLine(item.SId+" "+item.name+" "+item.FullMarks+" " +item.Marks);
            }
        }
    }
}

его вывод

enter image description here

но я ожидаю, что результат отсортирован по алфавиту.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Более компактный способ - использовать лямбды,

studentList.Sort((x, y) => x.name.CompareTo(y.name));

Или, лучше, использовать LINQ,

studentList = studentList.OrderBy(o => o.name).ToList();

Другое решение заключается в инкапсуляции функции сравнения в самом объекте студента,например,

public class student : IComparable<student>
{
        public int CompareTo(student other)
        {
            return name.CompareTo(other.name);
        }

  ...
}

Таким образом, вы можете просто сделать

studentList.Sort();

И он будет использовать функцию сравнения, которую вы написали в самом классе ученика.

0 голосов
/ 31 мая 2018

Я думаю, вы имели в виду:

return std1.name.CompareTo(std2.name);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...