Разобрать пример с Array.Sort() - C#
Формулировка задачи:
Здравствуйте! не могу понять как так получается что строка sr1.Sort(ref db_arr); возвращает отсортированный массив db_arr... почему так? sr1 ведь пустой(нулевой) массив... это благодаря
что ли...
foreach (DataBase d in db_object)
Console.WriteLine("{0}\t{1}\t{2}",d.id,d.login,d.password);using System;
namespace ConsoleApplication1
{
// Используем обобщенный интерфейс IComparable
class DataBase : IComparable<object>
{
public string login, password;
public int id;
byte sort; // Переменная, принимающая возможные значения типа сортировки
// 1 - сортировка по id
// 2 - сортировка по логину
public DataBase() {}
public DataBase(string login, string password, int id)
{
this.login = login;
this.password = password;
this.id = id;
}
// Реализуем интерфейс IComparable<T>
public int CompareTo(object other)
{
// Проверим тип объекта obj
DataBase db = other as DataBase;
if (db != null)
{
switch (db.sort)
{
case 1:
{
if (this.id > db.id)
return 1;
if (this.id < db.id)
return -1;
else
return 0;
}
case 2:
{
if (String.Compare(this.login, db.login) > 0)
return 1;
if (String.Compare(this.login, db.login) < 0)
return -1;
else
return 0;
}
default:
throw new FormatException("Такой сортировки не существует");
}
}
else
throw new ArgumentException("Данный параметр не относится к базе данных");
}
// Метод, реализующий сортировку
public void Sort(ref DataBase[] db_object)
{
try
{
Array.Sort(db_object);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
foreach (DataBase d in db_object)
Console.WriteLine("{0}\t{1}\t{2}",d.id,d.login,d.password);
}
public void NumberSort(byte j, ref DataBase[] arr)
{
for (int i = 0; i < arr.Length; i++)
arr[i].sort = j;
}
}
class Program
{
static void Main()
{
DataBase[] db_arr = new DataBase[5];
db_arr[0] = new DataBase("alex85", "sddd", 14);
db_arr[1] = new DataBase("dm23", "12345", 2);
db_arr[2] = new DataBase("rvklops", "ss", 5);
db_arr[3] = new DataBase("Djeff", "sdsdsdf", 86);
db_arr[4] = new DataBase("dff","s",15);
Console.WriteLine("Исходная таблица: \n-----------------\n\n" +
"ID\tLogin\tPassword\n");
foreach (DataBase d in db_arr)
Console.WriteLine("{0}\t{1}\t{2}",d.id,d.login,d.password);
Console.WriteLine("\nОтсортированная таблица БД по id-пользователя: " +
"\n----------------------------------------------\n" +
"ID\tLogin\tPassword\n");
DataBase sr1 = new DataBase();
sr1.NumberSort(1, ref db_arr);
sr1.Sort(ref db_arr);
Console.WriteLine("\nОтсортированная таблица БД по логину пользователя: " +
"\n----------------------------------------------\n" +
"ID\tLogin\tPassword\n");
sr1.NumberSort(2, ref db_arr);
sr1.Sort(ref db_arr);
Console.ReadLine();
}
}
}Решение задачи: «Разобрать пример с Array.Sort()»
textual
Листинг программы
sr1.Sort(ref db_arr);