Каковы преимущества списка <T>. Найти альтернативы? - PullRequest
0 голосов
/ 21 января 2009

Недавно я использовал предикат для описания логики поиска и передал его в метод Find нескольких списков.

foreach (IHiscoreBarItemView item in _view.HiscoreItems)
{
    Predicate<Hiscore> matchOfHiscoreName = 
        (h) => h.Information.Name.Equals(item.HiscoreName);

    var current = player.Hiscores.Find(matchOfHiscoreName);
    item.GetLogicEngine().ForceSetHiscoreValue(current as Skill);

    var goal = player.Goals.Find(matchOfHiscoreName);
    item.GetLogicEngine().ForceSetGoalHiscoreValue(goal as Skill);
}

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

Я особенно заинтересован в производительности.

Спасибо

1 Ответ

12 голосов
/ 21 января 2009

Преимущество поиска по сравнению с LINQ: доступно в .NET 2.0 Преимущество LINQ перед Find: согласованность с другими последовательностями; синтаксис выражения запроса и т. д.

Преимущество поиска по сравнению с BinarySearch: список не нужно сортировать, вам нужно только сравнение на равенство Преимущество BinarySearch по сравнению с Find: BinarySearch равно O (log n); Найти O (n)

Преимущество Find над циклом foreach: компактность и отсутствие повторения Преимущество цикла foreach над Find: любая другая пользовательская обработка, которую вы хотите выполнить

Из них только Find против BinarySearch имеет реальную разницу в производительности. Конечно, если бы вы могли перейти с List<T> на Dictionary<TKey,TValue>, то поиск элементов стал бы амортизированным O (1) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...