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

List<MyClass> sort & find

11.04.2011, 09:47. Показов 9078. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро! Не знаю в ту ли ветку пишу, так что не пинайти

До вечера надо мне узнать!
1) Как реализовать Сорт листа, по признаку (С исп интерфейса IComparer)
Все уже написано, просто в осн програме было для array.sort( namemas, new MyClass.SortByName() )
SorttByname я сам и прописал в myclass
Как это выглядит для листа, оч прошу помочь!

2)Как реализовать Поиск по признаку? (В листе есть стринг имени и инт аммо)

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
 
namespace ConsoleApplication1
{
    class Monster
    {
        private string name;
        private int ammo, health;
 
        public Monster(int health, int ammo, string name)
        {
            this.health = health;
            this.ammo = ammo;
            this.name = name;
        }
        public int Ammo
        {
            get { return ammo; }
            set 
            {
                if (value > 0) ammo = value;
                else ammo = 0;
            }
        }
        public string Name
        { get { return name; } }
 
        public void Passport()
        {
            Console.WriteLine("Monster {0} \t health = {1} ammo = {2} ", name, health, ammo);
        }
 
        public class SortByName : IComparer
        {
            int IComparer.Compare(object ob1, object ob2)
            {
                Monster m1 = (Monster)ob1;
                Monster m2 = (Monster)ob2;
                return String.Compare(m1.Name, m2.Name);
            }
        }
 
        public class SortByAmmo : IComparer
        {
            int IComparer.Compare(Object ob1, Object ob2)
            {
                Monster m1 = (Monster)ob1;
                Monster m2 = (Monster)ob2;
                if (m1.Ammo > m2.Ammo) return 1;
                else if (m1.Ammo < m2.Ammo) return -1;
                else return 0;
            }
        }
    }
 
 
    class Program
    {
        static void Main(string[] args)
        {
            int i = 0, ammo, health;
            string name;
            
            List<Monster> stado = new List<Monster>();
 
            for (i = 0; i < 2; ++i)
            {
                Console.WriteLine("Введи хэлз ");
                health = int.Parse(Console.ReadLine());
                Console.WriteLine("Введи Аммо ");
                ammo = int.Parse(Console.ReadLine());
                Console.WriteLine("Введи имя ");
                name = Console.ReadLine();
                stado.Add(new Monster(health, ammo, name));
            }
            foreach (Monster elem in stado) elem.Passport();
            
            /*Console.WriteLine("ПО имение");
            Array.Sort(stado, new Monster.SortByName());
            foreach (Monster elem in stado) elem.Passport();
 
            Console.WriteLine("По амону");
            Array.Sort(stado, new Monster.SortByAmmo());
            foreach (Monster elem in stado) elem.Passport();*/
           
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2011, 09:47
Ответы с готовыми решениями:

Перебрать List<MyClass> со вложенными списками List<MyClass> в каждом элементе
Есть древовидная структура вида: List&lt;MyClass&gt; myClassList; //... public class MyClass{ public List&lt;MyClass&gt;...

Как изменить свойство элемента в list? List<MyClass>
В list содержится класс MyClass у которого есть свойства, как изменить у элемента в list требуемое свойство? Например: class...

Сложный Dictionary<MyClass, Dictionary<List<MyClass2>, List<string>>> MyDictionary
Здравствуйте. Помогите plz реализовать обращения к словарю вида : Dictionary&lt;MyClass, Dictionary&lt;List&lt;MyClass2&gt;,...

7
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
11.04.2011, 10:44
Сортировка:
C#
1
2
3
4
5
6
7
public class SortByName : IComparer<Monster>
{
    public int Compare(Monster x, Monster y)
    {
        return x.Name.CompareTo(y.Name);
    }
}
C#
1
stado.Sort(new Monster.SortByName());
Аналогично для Ammo.
2
3 / 3 / 1
Регистрация: 11.04.2011
Сообщений: 121
11.04.2011, 18:31  [ТС]
Супер! Спасибо!!!
А поиск по признакам (ну по имени или аммо) как сделать можно?
0
11 / 11 / 2
Регистрация: 12.02.2011
Сообщений: 88
12.04.2011, 17:32
Цитата Сообщение от Delog Посмотреть сообщение
Сортировка:
C#
1
2
3
4
5
6
7
public class SortByName : IComparer<Monster>
{
    public int Compare(Monster x, Monster y)
    {
        return x.Name.CompareTo(y.Name);
    }
}
C#
1
stado.Sort(new Monster.SortByName());
Мне это помогло, но я не совсем понимаю, что здесь происходит. Не разъясните?
1
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
12.04.2011, 18:14
Одна из перегрузок метода Sort в качестве параметра принимает объект в котором реализован интерфейс IComparer. Сначала, сделаем такой объект:

1. Объявляем класс, с реализацией обобщенного интерфейса IComparer (обобщенный, чтобы потом не выполнять приведение Monster m1 = (Monster)ob1)
C#
1
public class SortByName : IComparer<Monster>
2. Реализуем единственный метод, который требует интерфейс IComparer:
C#
1
2
3
4
public int Compare(Monster x, Monster y)
{
 
}
3. Этот метод должен возвращать -1, если первый сравниваемый объект меньше второго, 0 - если равны, 1 - если больше. Поскольку свойство Name объекта Monster имеет строковой тип, а у этого типа есть метод CompareTo(), который возвращает как раз то, что нужно, то воспользуемся им:
C#
1
2
3
4
5
6
public int Compare(Monster x, Monster y)
{
  //Здесь не пришлось приводить типы
  //т.к. в обобщенном интерфейсе параметры x и y сразу имеют нужный тип
  return x.Name.CompareTo(y.Name);
}
Итого на этом шаге имеем:
C#
1
2
3
4
5
6
7
public class SortByName : IComparer<Monster>
{
    public int Compare(Monster x, Monster y)
    {
        return x.Name.CompareTo(y.Name);
    }
}
4. Ну а теперь надо создать экземпляр данного класса и передать в качестве аргумента методу Sort:
C#
1
2
3
stado.Sort(new Monster.SortByName());
//Здесь написано Monster.SortByName, а не просто SortByName
//потому что класс SortByName вложен в класс Monster
0
11 / 11 / 2
Регистрация: 12.02.2011
Сообщений: 88
12.04.2011, 20:26
Delog, с этим более менее понятно. я вот решил создать отдельный cs-файл с классами для сортировок - по имени, фамилии, отчеству и так далее. а вы не знаете, каким методом происходит сортировка в функции Sort? интересно, как оно там работает, не люблю в черный ящик играть
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
12.04.2011, 20:59
Цитата Сообщение от keetotko Посмотреть сообщение
не люблю в черный ящик играть
Принцип черного ящика в ООП называется "инкапсуляция" и является одним из основополагающих принципов ООП.
0
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
13.04.2011, 14:46
Цитата Сообщение от keetotko Посмотреть сообщение
каким методом происходит сортировка в функции Sort
Используется алгоритм быстрой сортировки (QuickSort). Средняя сложность O(n*log(n)).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2011, 14:46
Помогаю со студенческими работами здесь

Не работает динамическое заполнение List<MyClass>
Здравствуйте! Дорогие форумчане, объясните, что я делаю не так! Есть тестовая функция, динамически загружающая данные в ListView(WPF)...

Нужен совет по List<MyClass> IndexOf
Недавно начал изучать C#, встретился с List, не могу справится с поиском индекса элемента.(Поиском наверно не умею пользоваться потому что...

Перебор экземпляров класса через foreach в List<MyClass>
Вроде бы элементарная задача, но что-то не так. Почему на консоль выводиться один и тот же экземпляр? Почему foreach не проходит по всем...

Как добавить в List<MyClass> данные типа Class
Язык программирования C#! Всем добрый день! Есть такая проблема связанная со свойством типа List&lt;свой тип&gt; итак её суть! Создал...

Как заполнить List<MyClass> случайным количеством классов наследников?
Добрый день. Что-то никак не могу сделать следующее: Есть абстрактный класс Room и классы наследники Kitchen, Bedroom, Hall, Restroom,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
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
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru