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

List<MyClass> sort & find

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

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

До вечера надо мне узнать!
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2011, 09:47
Ответы с готовыми решениями:

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

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

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

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

7
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
11.04.2011, 10:44 2
Сортировка:
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  [ТС] 3
Супер! Спасибо!!!
А поиск по признакам (ну по имени или аммо) как сделать можно?
0
11 / 11 / 2
Регистрация: 12.02.2011
Сообщений: 88
12.04.2011, 17:32 4
Цитата Сообщение от 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#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
12.04.2011, 18:14 5
Одна из перегрузок метода 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 6
Delog, с этим более менее понятно. я вот решил создать отдельный cs-файл с классами для сортировок - по имени, фамилии, отчеству и так далее. а вы не знаете, каким методом происходит сортировка в функции Sort? интересно, как оно там работает, не люблю в черный ящик играть
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
12.04.2011, 20:59 7
Цитата Сообщение от keetotko Посмотреть сообщение
не люблю в черный ящик играть
Принцип черного ящика в ООП называется "инкапсуляция" и является одним из основополагающих принципов ООП.
0
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
13.04.2011, 14:46 8
Цитата Сообщение от keetotko Посмотреть сообщение
каким методом происходит сортировка в функции Sort
Используется алгоритм быстрой сортировки (QuickSort). Средняя сложность O(n*log(n)).
0
13.04.2011, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2011, 14:46
Помогаю со студенческими работами здесь

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

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

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

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


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

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