Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/64: Рейтинг темы: голосов - 64, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21

Как пользоваться функцией Array.Sort() для сортировки по алфавиту

07.05.2012, 12:34. Показов 12762. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет обьясните пожалуйсто как пользоваться функцией Array.Sort(); для сортировке по алфавиту для коллекций....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2012, 12:34
Ответы с готовыми решениями:

std::sort/qSort. Реализация сортировки с заданной функцией сортировки в классе. must use '.*' or '->*' to call
Доброго времени суток. Столкнулся с проблемой. Необходимо отсортировать элементы в списке Qt (то бишь QList). Элементы-структуры...

Сортировка функцией Array.Sort
Даже числа не выводит,чес слово. Что исправить? static void Main(string args) { int n; ...

Принцип сортировки Array.Sort
Всем добрый день/вечер/ночь. Есть массив, содержащий в себе некую информацию. Каждый элемент массива всегда начинается с цифры. Хочу...

20
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 12:35
3a9Iac, для какой коллекции?
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 12:41  [ТС]
для коллекции record по name
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections.ObjectModel;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public class Record
        {
            public String Name, date, za4;
 
        }
        public Collection<Record> records = new Collection<Record>();
        StreamReader reader;
        StreamWriter writer;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Record record;
            reader = new StreamReader("d:\\data.txt");
            while (!reader.EndOfStream)
            {
                record = new Record();
                record.Name = reader.ReadLine();
                record.date = reader.ReadLine();
                record.za4 = reader.ReadLine();
                reader.ReadLine();
                records.Add(record);
                
 
            }
            reader.Close();
            listBox1.Items.Clear();
            for (int i = 0; i < records.Count; i++)
            {
                listBox1.Items.Add(records[i].Name + ' ' + records[i].date + ' ' + records[i].za4);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Array.Sort(records);             //вот тут мне надо как то отсортировать...
        
}
Добавлено через 2 минуты
Тут прочитал что надо задействовать интерфейс IComparable только незнаю как(
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 12:49
Цитата Сообщение от 3a9Iac Посмотреть сообщение
Тут прочитал что
Цитата Сообщение от http://msdn.microsoft.com/en-us/library/system.array.sort(v=vs.71).aspx
Array.Sort Method
Sorts the elements in one-dimensional Array objects.
Замени Collection<Record> на List<Record>, после будет работать такая штука:
C#
1
records.Sort((x, y) => String.CompareOrdinal(x.Name, y.Name));
А про Collection<Record> - вообще забудь, что она существует.
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 12:52  [ТС]
Это будет сортировка по алфавиту?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 12:55
3a9Iac, да.
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 12:57  [ТС]
Хмм..У меня сортирует только когда на английском.....А как сделать на русском?

Добавлено через 47 секунд
Спасибо большое....Хм еще вопрос)...А неподскажеш как мне сортировать еще и по возрасту?...
0
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
07.05.2012, 12:59
Всё правильно, именно этот интерфейс нужно реализовать у класса Record. Например:
C#
1
2
3
4
5
6
7
8
public class Record:IComparable{
int CompareTo(object obj){
Record other = obj as Record;
if (other == null)
throw new InvalidOperationException();
return string.Compare(Name, other.Name);
}
}
P. S. Вместо reader.Close(); я б рекомендовал оператор using, иначе в случае ошибки он не закроет файл. А для формирования названия элемента я б рекомендовал:
C#
1
listBox1.Items.Add(string.Format("{0} {1} {2}", records[i].Name, records[i].date, records[i].za4));
Ибо оператор + создаёт каждый раз новый экзпемпляр строки, что явно не оптимально.
0
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 13:00  [ТС]
Илья я только начал изучать си шарп пожалуйсто не мог бы ты поподробнее и попонятнее?)
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 13:03
Цитата Сообщение от 3a9Iac Посмотреть сообщение
А неподскажеш как мне сортировать еще и по возрасту?...
Дату необходимо хранить в более читаемом виде сперва, к примеру DateTime, а не string. И что это за сортировка? Отдельная или должна накладываться на результат сортировки по имени?

Цитата Сообщение от 3a9Iac Посмотреть сообщение
А как сделать на русском?
Я на русском проверял.
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 13:08  [ТС]
Ну мне надо чтоб нажал одну кнопочку он сортирует по имени...вторую по возрасту....третью по среднему баллу....как то так...А как сделать мне сделать это?...что бы одно в дата тайм другая в стринг?....

Добавлено через 2 минуты
У меня почему то в лист боксе симбволы неотображаются рисует ромбик а в нем знак вопроса...Незнаете как это исправить?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 13:14
Цитата Сообщение от 3a9Iac Посмотреть сообщение
Ну мне надо чтоб нажал одну кнопочку он сортирует по имени...вторую по возрасту....третью по среднему баллу....как то так
В том, что я написал для сортировки, заменяется Name на нужное. Вот только с датой надо иначе.

Цитата Сообщение от 3a9Iac Посмотреть сообщение
что бы одно в дата тайм другая в стринг?....
DateTime можно преобразовывать в string.

Цитата Сообщение от 3a9Iac Посмотреть сообщение
У меня почему то в лист боксе симбволы неотображаются рисует ромбик а в нем знак вопроса...
При считывании данных с источника была указана (если вообще была указана) неверно кодировка.

Что-то много банальных вопросов, может стоит взять в руки учебник по C#?
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 13:15  [ТС]
Я не указывал кодировку не подскажеш как ее указать?)
DateTime можно преобразовывать в string. - А как?)
А как с датой?
Прости за мою тупость(
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 13:21
Цитата Сообщение от 3a9Iac Посмотреть сообщение
Я не указывал кодировку не подскажеш как ее указать?)
Я так подозреваю значения брались с файла? Надо передать при считывании еще свойство System.Text.Encoding.Default. (Вместо Default подставить нужное - ItelliSense подскажет)

Цитата Сообщение от 3a9Iac Посмотреть сообщение
DateTime можно преобразовывать в string. - А как?)
DateTime format

Цитата Сообщение от 3a9Iac Посмотреть сообщение
А как с датой?
У класса DateTime есть свойство Now. А у экземпляра объекта DateTime есть Year. Итого что-то типа:
C#
1
var age = DateTime.Now.Year - record.Date.Year;
В последствии сравнить их.
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 13:27  [ТС]
А куда вставлять System.Text.Encoding. ?
Хм
Цитата Сообщение от Blood-Angel Посмотреть сообщение
var age = DateTime.Now.Year - record.Date.Year
перед этим мы должны представить record в DateTime ? Если так я попробывал тогда при считывании из файла он пишет ошибку....
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 13:34
Цитата Сообщение от 3a9Iac Посмотреть сообщение
перед этим мы должны представить record в DateTime ?
Что? Это еще нафига?
Вытягиваешь из меня код, самому надо было подумать:
C#
1
records.Sort((x, y) => (DateTime.Now.Year - x.Date.Year).CompareTo(DateTime.Now.Year - y.Date.Year));
Цитата Сообщение от 3a9Iac Посмотреть сообщение
А куда вставлять System.Text.Encoding. ?
А от куда мне знать каким боком ты открываешь файл и считываешь данные. Я конечно предполагаю, что с помощью файлового потока, но все же. Во время создания этого самого потока, один из его конструкторов должен принимать кодировку.
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 13:46  [ТС]
reader = new StreamReader("d:\\data.txt", Encoding.(тута кодировка?)); должно выглядеть так да?...
ДА не вытягиваю я...честно просто невдупляю как(((

Добавлено через 4 минуты
С кодировкой разобрался спасибо)

Добавлено через 2 минуты
Цитата Сообщение от Blood-Angel Посмотреть сообщение
1 records.Sort((x, y) => (DateTime.Now.Year - x.Date.Year).CompareTo(DateTime.Now.Year - y.Date.Year));
Тут пишет уйму ошибок=(

Добавлено через 4 минуты
Там надо где то сначало преобразовать record.date из стринга в datatime?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 13:47
Цитата Сообщение от 3a9Iac Посмотреть сообщение
Тут пишет уйму ошибок=(
Исправь Record на:
C#
1
2
3
4
5
6
    public class Record
    {
        public String Name, za4;
        public DateTime Date;
 
    }
Я же об этом говорил.
И он сортирует по убыванию, чтобы сортировало по не убыванию, необходимо поменять местами x и y в скобках слева.
1
0 / 0 / 1
Регистрация: 21.04.2012
Сообщений: 21
07.05.2012, 13:55  [ТС]
А какие тут библиотеки нужны дополнительные? Ой не туплю сорри слушай теперь ошибка тут
C#
1
record.Date = reader.ReadLine();
тут надо конвертировать?

Добавлено через 4 минуты
record.Date = Convert.ToDateTime(reader.ReadLine()); ?

Добавлено через 27 секунд
Сделал так теперь у меня в листбоксе пусто стало =(
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
07.05.2012, 14:01
Цитата Сообщение от 3a9Iac Посмотреть сообщение
record.Date = Convert.ToDateTime(reader.ReadLine()); ?
Пример

Цитата Сообщение от 3a9Iac Посмотреть сообщение
Сделал так теперь у меня в листбоксе пусто стало =(
Для этого был придуман Debug.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2012, 14:01
Помогаю со студенческими работами здесь

Принцип сортировки в Enumerable.OrderBy и Array.Sort
Здравствуйте! Подскажите, пожалуйста, почему при сортировке одного и того же массива num() типа int через Array.Sort(num,comp) и...

Как правильно использовать sort() для сортировки массива?
Хочу отсортировать массив char ch, можно ли это сделать с помощью стандартной библиотеки или обязательно использовать strcmp?? ...

Как использовать .sort() для сортировки массива объектов по определенному свойству?
Как использовать .sort() для сортировки массива объектов по определенному общему свойству?

Хранимая процедура сортировки числового поля для сортировки по алфавиту
В таблице есть поле Name , в котором, собственно, и хранятся типы товаров, и есть поле Ordinal c уникальными значениями типа int Name ...

Как работает Array.Sort
Собственно вопрос в том, как всё-таки работает сортировка Array.Sort? Этот вопрос возник потому, что после анализа время ее работы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru