Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
10 / 10 / 4
Регистрация: 05.08.2009
Сообщений: 101
1
.NET 2.x

Консоль. Контейнер для хранения данных с возможностью сортировки данных по любому полю.

29.09.2011, 01:22. Показов 2498. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Задача следующая: пользователь вводит в консоль табличные данныев формате (это пример), представленном ниже:

Фамилия Инициалы Год рождения Оклад
Иванов И.И. 1975 517.50
Петренко П.П. 1956 219.10
Паниковский М.С. 1967 300.00
Где лучше хранить такой набор данных, чтобы его потом можно было бы сортировать по любому столбцу? БД не предлагать. Была идея завести 4 массива, далее переводить его в Array и сортировать Array.Sort, но так можно сортировать данные по одному столбцу и если они поменяют (отсортированные данные) свои места в списке - то нужно будет как-то менять данные синхронно и в других массивах. Или можно использовать список? Но какой?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2011, 01:22
Ответы с готовыми решениями:

Подскажите контейнер для хранения данных
Доброе время суток, имеем файл следующего содержания: # | Name | Type | Target 1 test txt ...

Разработать шаблон класса для хранения данных (контейнер)
Я не понял как описать шаблон класса для хранения данных (контейнер). Данные должны хранится,...

Поиск данных по любому полю
Привет=)) как сделать в Delpi в самой программе так чтобы я ввел название поля он мне вывел в...

Вывод данных по запросу – поиск по любому полю
Помогите организовать поиск по любому полю в данной программе

7
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
29.09.2011, 01:35 2
Таблица - это всего лишь один из методов отображения данных.

Создать класс для хранения данных (i.e. Person) и потом создать массив или список объектов этого класса.
Сортировать через метод Sort, давая ему аргументом разные компареры в зависимости от типа данных, по которым сортировать.
Как вариант, использовать запросы LINQ для сортировки

А уж как потом отображать отсортированный массив: таблицей или построчно - дело вкуса
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 01:54 3
Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void computeButton_Click(object sender, EventArgs e)
        {
            TextAnalizer textAnalyzer = new TextAnalizer();
            List<AnalyzedWord> listOfAnalyzedWords = textAnalyzer.StartAnalize(textBox.Text);
            //Основное внимание следует обратить на саму сортировку
            listOfAnalyzedWords.Sort(new Comparison<AnalyzedWord>(
                delegate(AnalyzedWord aw1, AnalyzedWord aw2)
                {
                    if (aw1.Quantity < aw2.Quantity)
                        return 1;
                    if (aw1.Quantity == aw2.Quantity)
                        return 0;
                    else
                        return -1;
                }));
 
            CompleteListView(listOfAnalyzedWords);
        }
AnalyzedWord
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    class AnalyzedWord
    {
        /// <summary>Слово, которое будет использоваться для подсчёта кол-ва слов в анализируемом тексте</summary>
        public string Word { get; private set; }
        /// <summary>Количество слов в анализируемом тексте</summary>
        public int Quantity { get; set; }
 
        public AnalyzedWord(string Word, int Quantity)
        {
            this.Word = Word;
            this.Quantity = Quantity;
        }
    }



В итоге я получаю сортированный список по свойству Quantity. Такого вида:
привет - 12
тогда - 14
а - 70
и - 76
1
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
29.09.2011, 02:03 4
Или так:

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
class Program
{
    static void Main(string[] args)
    {
        List<Person> people = new List<Person>();
 
        string input;
        while (!string.IsNullOrEmpty(input = Console.ReadLine())) {
            var parts = input.Split(' ');
            var person = new Person() {
                SecondName = parts[0],
                Initials = parts[1],
                DateOfBirth = DateTime.Parse(parts[2]),
                Salary = decimal.Parse(parts[3])
            };
            people.Add(person);
        }
 
        var sortedByName = people.OrderBy(p => p.SecondName);
        var sortedByInitials = people.OrderBy(p => p.Initials);
        var sortedByDate = people.OrderBy(p => p.DateOfBirth);
        var sortedBySalary = people.OrderBy(p => p.Salary);
    }
}
 
class Person
{
    public string SecondName
    {
        get;
        set;
    }
    public string Initials
    {
        get;
        set;
    }
    public DateTime DateOfBirth
    {
        get;
        set;
    }
    public decimal Salary
    {
        get;
        set;
    }
 
    public override string ToString()
    {
        return string.Format("{0} {1} {2:MM/dd/yyyy} {3}", SecondName, Initials, DateOfBirth, Salary);
    }
}
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 02:12 5
Ну я взял текст из программы, которую написал для себя (учу английский, хотел узнать сколько слов и какие наиболее употребляемые в тексте прилагаемом к аудиокниге) под второй фрэймворк, поэтому лямбда выражения не использовались.

lekha2009, если не понятно что за people.OrderBy(p => p.Salary); например, то перейди по ссылке выше в этом сообщении.
1
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
29.09.2011, 02:22 6
Еще один важный момент:
в примере, предложенном Casper-SC с использованием метода Sort и сравнителем, элементы в оригинальном массиве поменяются местами в результате сортировки.
В примере, предложенном мной, оригинальный массив остается неизменным, а метод OrderBy возвращает только энумератор, который "проведет" по элементам массива в алфавитном порядке.

Что использовать - зависит от желаемого результата и поставленной задачи.
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
29.09.2011, 02:38 7
Цитата Сообщение от kolorotur Посмотреть сообщение
В примере, предложенном мной, оригинальный массив остается неизменным, а метод OrderBy возвращает только энумератор, который "проведет" по элементам массива в алфавитном порядке.
Интересно, не знал об этом. Появится больше времени, почитаю.
0
10 / 10 / 4
Регистрация: 05.08.2009
Сообщений: 101
29.09.2011, 13:22  [ТС] 8
Ребята, спасибо - разобрался. Жаль, что не дружу с LINQ, но ничего, позже познакомлюсь на досуге.
Сделал так:
1) написал класс с описанием структуры данных, как предложил kolorotur;
2) сортировку делал через делегат, наподобие предложенного Casper-SC. https://www.cyberforum.ru/csha... post153628
0
29.09.2011, 13:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2011, 13:22
Помогаю со студенческими работами здесь

Необходим тип данных для хранения в нем массива чисел с возможностью добавлять и удалять
Здравствуйте, мне необходим тип данных для хранения в нем массива чисел с возможностью добавлять,...

функция сортировки по любому полю
функция сортировки по любому полю с примитивным значением (например age или name) возвращает новый...

Создать запись для хранения. Для хранения данных использовать стек. Для группировки данных использовать очередь
Решил выложить свои лабораторные работы 1-10 за первый курс, первого семестра...

Программный ввод данных в консоль с возможностью ручного редактирования
Всем привет. Такой вопрос. String s=&quot;Hello&quot;; //некий код s=Console.ReadLine(); Можно ли на...

Заменить контейнер vector, использовавшийся для хранения текстовых строк (листинг 2.3), на контейнер list
Здравствуйте форумчане, может кто объяснить как делать это задание и что собственно мы тут вообще...

Создать в SQL Server базу данных для хранения данных
В общем пригласили меня на собеседования, дали тестовое задания, мог бы помочь кто? Как с этим...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru