Автоматизация бизнеса

Пользовательский поиск

воскресенье, 30 сентября 2012 г.

C# List и Как найти нужный элемент

Класс List<T> строго типизированный список объектов. Объекты доступный по индексу. Поддерживает методы для поиска по списку, выполнения сортировки и других операций со списками.
Ниже приведен пример, где поиск осуществляется в цикле foreach и методом Find класса List<T>.

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace Blogger_ListT
{
    class Program
    {
        class MenuForOrder
        {
            public MenuForOrder()
            {
                Id = -1;
                Name = string.Empty;
                Price = -1;
            }
            public MenuForOrder(int id,string name,int price)
            {
                Id = id;
                Name = name;
                Price = price;
            }
            private int Id;
            private string Name;
            private int Price;
            public int ID
            {
                get
                {
                    return Id;
                }
                set
                {
                    Id = value;
                }
            }
            public string NAME
            {
                get
                {
                    return Name;
                }
                set
                {
                    Name = value;
                }
            }
            public int PRICE
            {
                get
                {
                    return Price;
                }
                set
                {
                    Price = value;
                }
            }
            public override string ToString()
            {
                return this.Id.ToString()+" "+this.Name+" "+this.PRICE.ToString();
            }
        }
     
        static List<MenuForOrder> lMenuForOrder ;
     
        static void Main(string[] args)
        {
            lMenuForOrder = new List<MenuForOrder>();
            for (int i = 1; i < 100000; i++)
            {
                lMenuForOrder.Add(new MenuForOrder(i, "Mohito", 250));
            }

            Stopwatch sw=new Stopwatch();
            sw.Start();
            MenuForOrder findeditem = lMenuForOrder.Find(delegate(MenuForOrder m) { return m.ID == 99999; });
            Console.WriteLine(findeditem.ToString() + " Find Time: " + sw.ElapsedMilliseconds.ToString());
            sw.Start();

            foreach (MenuForOrder mfo in lMenuForOrder)
            {
                if (mfo.ID == 99999)
                    Console.WriteLine(mfo.ToString() + " Find Time: " + sw.ElapsedMilliseconds.ToString());
            }
         
            Console.Read();
        }
    }
}

Вот какой результат получился


Но если поменять местами цикл и метод, то получается такой же ответ.
Метод Find  более читабелен. Но в нем опять таки реализован цикл foreach. Данный пример использует FrameWork 2.0 для более старших версии используйте Find метод вот так
MenuForOrder findeditem =  lMenuForOrder.Find(finded => finded.Id ==99999).
Жду Откликов.

Комментариев нет:

Отправить комментарий