Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2016, 19:30   #1
sweeeeel
Новичок
Джуниор
 
Регистрация: 17.11.2016
Сообщений: 2
По умолчанию Перенастройка поиска

Есть код. Сортирует Собак по кличкам и выполняет поиск по ним же( вводишь кликуху собаки выдает всю её инфу). При включении выводит 5 столбцов с кличкой, породой, возраст, пол, награды из текстового файла.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
 
 
namespace ConsoleApplication1
{
    class Program
    {
 
        public class mySort : IComparer
        {
 
            
            int IComparer.Compare(Object x, Object y) 
            {
                Dog r = (Dog)x;
                Dog q = (Dog)y;
                Int32 ret = r.name.CompareTo(q.name); //менять где .name на то что нужно(.age, .poroda)
                if (ret == 0)
                {
                    return r.name.CompareTo(q.name); //тоже
                }
                else
                { return ret; }
           }
        }
 
 
        
 
        public class Dog : IComparable
        {
            public string name;
            public string poroda;
            public string pol;
            public int age;
            public int medal;
            public int CompareTo(Object rhs)
            {
                Dog r = (Dog)rhs;
                Int32 ret = this.name.CompareTo(r.name);// тожже
                return ret;
            }
        }
 
 
        static void read(ArrayList DOG, string filename)
        {
            Encoding enc = Encoding.GetEncoding(1251);
            StreamReader file = new StreamReader(filename, enc);
            while (true)
            {
                string st = file.ReadLine();
                if (st == null) break;
                string[] b = st.Split();
                Dog a = new Dog();
                a.name = b[0];
                a.poroda = b[1];
                a.pol = b[2];
                a.age = int.Parse(b[3]);
                a.medal = int.Parse(b[4]);
                DOG.Add(a);
 
            }
            file.Close();
        
        }
 
        
        static void Main(string[] args)
        {
 
            ArrayList DOG = new ArrayList();
 
            read(DOG, "dogs.txt");
            
            
            
            
            Console.WriteLine("\n");
 
            IComparer abc = new mySort();
            DOG.Sort(abc);
            Console.WriteLine("Сортировка по Кличке");
            foreach (Dog i in DOG)
            {
                Console.WriteLine(" {0} \t {1} \t {2} \t {3} \t {4}", i.name, i.poroda, i.pol, i.age, i.medal);
            }
            
 
            Console.WriteLine("\n");
            Console.WriteLine("Кого будем искать? \n");
 
            string l = Console.ReadLine();
            Dog q = new Dog();
            q.name = l; // и здесь
            
            object obj = q;
 
 
 
 
 
 
 
 
 
 
            int retVal = DOG.BinarySearch(obj);
            if (retVal >= 0)
            {
                Dog a = new Dog();
                a=(Dog)DOG[retVal];
                Console.WriteLine(" {0} \t {1} \t {2} \t {3} \t {4}", a.name, a.poroda, a.pol, a.age, a.medal);
            }
            else
            {
                Console.Write("No results");
            }
 
 
            Console.ReadLine();
 
        }
    }
}
Нужно переделать чтобы был поиск по породе. Никак не могу понять как. По идее Алгоритм поиска это вот эти строчки:

Код:
            Console.WriteLine("\n");
            Console.WriteLine("Кого будем искать? \n");
 
            string l = Console.ReadLine();
            Dog q = new Dog();
            q.name = l; // и здесь
            
            object obj = q;
 
 
 
 
 
 
 
 
 
 
            int retVal = DOG.BinarySearch(obj);
            if (retVal >= 0)
            {
                Dog a = new Dog();
                a=(Dog)DOG[retVal];
                Console.WriteLine(" {0} \t {1} \t {2} \t {3} \t {4}", a.name, a.poroda, a.pol, a.age, a.medal);
            }
            else
            {
                Console.Write("No results");
            }
 
 
            Console.ReadLine();
sweeeeel вне форума Ответить с цитированием
Старый 17.11.2016, 19:52   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Для бинарного поиска нужно сначала сортировать по породе.


А так, предлагаю юзать
Код:
List<Dog> found = DOG.FindAll(x=>x.poroda == что-то);
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 17.11.2016 в 19:56.
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить поиск записей таким образом, чтобы он производится по другим критериям (другому полю) sweeeeel Помощь студентам 0 17.11.2016 19:28
Форма поиска (несколько параметров поиска) Nastasya83 Microsoft Office Access 1 19.04.2012 15:48
макрос для поиска позиций и вывода данных на лист поиска mr-111 Microsoft Office Excel 12 13.03.2012 15:03
код поиска vostok Microsoft Office Excel 1 01.05.2011 22:04
Форма поиска - задать диапазон поиска VictorM Microsoft Office Excel 9 21.04.2011 00:12