Как я могу проверить коллекцию List для объекта, который имеет определенное свойство? - PullRequest
2 голосов
/ 31 января 2011

У меня есть List<IAgStkObject>. Каждый IAgStkObject имеет свойство под названием InstanceName. Как я могу выполнить поиск в своем Списке, чтобы определить, имеют ли какие-либо из содержащихся в нем объектов IAgStkObject конкретное имя InstanceName? В прошлом я бы использовал цикл foreach ... но это кажется слишком медленным.

WulfgarPro

Ответы [ 3 ]

4 голосов
/ 31 января 2011

Если единственное, что у вас есть, это список (не упорядоченный InstanceName), то более быстрого способа не существует (если вы часто делаете похожие тесты, вы можете предварительно обработать данные и создать, например, словарь, индексированный по InstanceName).

Единственный способ отличаться от «прошлого» - это полезные методы расширения, позволяющие писать только

return myList.Any(item => item.InstanceName == "Searched name");
2 голосов
/ 31 января 2011

Вы можете использовать Linq :

list.Any(o => o.InstanceName == "something")

Но вы не можете избежать цикла по списку (в случае Linq это делается неявно). Если вы хотите повысить производительность, измените структуру данных. Может быть, подходит словарь (InstanceName -> IAgStkObject)?

2 голосов
/ 31 января 2011

Если список отсортирован по InstanceName, вы можете использовать алгоритм двоичного поиска, в противном случае: нет.

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

Но подумайте: сколько у вас объектов ? Вы уверены, что , проходящий через них, является проблемой производительности? Если у вас <1000 объектов, вам абсолютно не нужно беспокоиться (если вы не хотите что-то делать в реальном времени). </p>

...