2016-07-19 3 views
1
public IEnumerable<string> ListFoldersInternal(IEnumerable<CloudBlobDirectory> folders) 
{ 
    return new HashSet<string>(folders.Select(x => x.Prefix)); 
} 

Это хороший выбор для использования HashSet, чтобы избежать дублирования и возврата IEnumerable?Эффективно использовать HashSet, чтобы избежать дубликатов?

Любые идеи по улучшению этого кода?

+1

Это самый эффективный способ http://stackoverflow.com/questions/30366669/most-efficient-way-to-remove-duplicates-from-a-list – fubo

+0

Если вы вызываете 'ToArray()', вы можете как сделайте возвращаемый тип 'CloudItem []'. Если тип возврата - 'IList ', просто вызовите 'ToList()' –

+1

Они сделали метод с целью избежать дубликатов. Это называется 'Distinct()'. –

ответ

0

Использование Hashset - хорошая идея и, безусловно, эффективный способ избежать дубликатов. MSDN говорит:

Класс HashSet<T> обеспечивает высокопроизводительные операции набора. Набор представляет собой набор, который не содержит повторяющихся элементов, а элементы не имеют особого порядка.

Если вы хотите, вы можете использовать LINQ, а также как

List<T> myList = ......; 
List<T> removeDuplicates = myList.Distinct().ToList(); 
1

более понятным способом может быть использовать расширение LINQ Distinct:

return folders.Select(x => x.Prefix).Distinct(); 

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