Быстрее AddRange, затем искать дубликаты или проверять наличие конфликтов на каждом элементе? - PullRequest
2 голосов
/ 07 сентября 2011

(примечание: я пометил этот C #, но я использую Monotouch, поэтому он может вести себя по-другому, я не слишком уверен)

Вот мой сценарий: у меня естьСписок, который сохраняется на протяжении всего моего приложения, это относится ко всему списку объектов.Затем я фильтрую эти данные (через выбор пользователя в приложении) и отображаю соответствующие элементы.

Список обновляется при обращении к веб-службе, способ, которым я делаю это следующим образом:

HandleWebServiceComplete(object sender, ItemRetreivedEventArgs e)
{
    // snip - error handling above this

    if (e.Result != null)
    {
        foreach (var item in e.Result)
        {
            if (!mainList.Contains(item))
                mainList.Add(item);
        }

        RefreshDisplayList(mainList);
    }
}

Так что, очевидно, это проверяет каждый элемент, возвращаемый веб-службой, для проверкичто его еще нет в списке (бывают ситуации, когда это возможно) - поэтому мой вопрос, лучше ли будет использовать List.AddRange(), а потом проверять наличие дубликатов в списке или просто продолжать в том же духе?уже идет?

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

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

2 голосов
/ 08 сентября 2011

Если вас не интересует порядок элементов, вы можете просто использовать HashSet <> вместо List <>.UnionWith() метод принимает "диапазон" и будет делать то, что вы хотите.

...