Самый быстрый поиск в коллекции объектов, указав свойство объекта в .NET - PullRequest
0 голосов
/ 16 ноября 2011

Я хотел бы иметь коллекцию, доступную для поиска по значению свойства в T. Свойство, вероятно, будет изменяться много раз в течение срока службы экземпляра T. Скорость поиска важна - линейный поискне может быть и речи.

Я успешно использовал отдельный экземпляр Dictionary, но поддерживая другую коллекцию, это похоже на kluge.Я надеюсь, что есть лучший способ.

Одна из возможностей - использовать класс SortedSet, который может сортировать мои объекты в порядке, указанном Property.Я могу скопировать SortSet в массив и использовать Array.BinarySearch, но я не могу согласиться с дополнительными затратами на создание этого массива каждый раз, когда я хочу выполнить поиск.Может быть, есть какой-то способ использовать BinarySearch в SortedSet?

Я признаю, что видел этот вопрос с некоторыми ответами по крайней мере дважды, но я не мог найти четкую альтернативу моему подходу к словарю.* Я использую .Net 4.0.

1 Ответ

0 голосов
/ 16 ноября 2011

Хотелось бы что-нибудь подобное для вас?Конечно, вы можете изменить базовый набор, чтобы он отличался от списка, и я не гарантирую, что он будет работать так, как я написал, но идея заключается в том, чтобы постоянно обновлять список.

public class Holder
{
    public Action OnPropChange;

    int _prop;
    public int Prop
    {
        get
        {
            return _prop;
        }
        set
        {
            _prop = value;
            OnPropChange();
        }
    }
}

public class SortedListThing : List<Holder>
{
    public void Add(Holder h)
    {
        BinarySortedInsert(h);
        h.OnPropChange = () => { this.Remove(h); base.Add(h); };
    }

    private void BinarySortedInsert(Holder h)
    {
        //do stuff
    }

    public void Remove(Holder h)
    {
        h.OnPropChange = null;
        base.Remove(h);
    }
}
...