Я посмотрел это в сети, но я прошу об этом, чтобы я не пропустил что-то. Есть ли встроенная функция для преобразования HashSets в списки в C#? Мне нужно избегать двуличности элементов, но мне нужно вернуть список.C# Преобразование Hashset в списки
17
A
ответ
48
Вот как я бы это сделать:
using System.Linq;
HashSet<int> hset = new HashSet<int>();
hset.Add(10);
List<int> hList= hset.ToList();
HashSet, по определению, не содержащий дубликатов. Поэтому нет необходимости в Distinct
.
5
Существует способ расширения Linq ToList<T>()
, который это сделает (он определен по IEnumerable<T>
, который реализован HashSet<T>
).
Просто убедитесь, что вы using System.Linq;
Как вы, очевидно, известно, HashSet
обеспечит вас нет дубликатов, и эта функция позволит вам вернуть его в качестве IList<T>
.
12
два эквивалентных варианта:
HashSet<string> stringSet = new HashSet<string> { "a", "b", "c" };
// LINQ's ToList extension method
List<string> stringList1 = stringSet.ToList();
// Or just a constructor
List<string> stringList2 = new List<string>(stringSet);
Лично я предпочитаю называть ToList
это означает, что вам не нужно пересчитывать тип списка.
В отличие от моих предыдущих мыслей, оба способа позволяют ковариационная быть легко выражается в C# 4:
HashSet<Banana> bananas = new HashSet<Banana>();
List<Fruit> fruit1 = bananas.ToList<Fruit>();
List<Fruit> fruit2 = new List<Fruit>(bananas);
5
List<ListItemType> = new List<ListItemType>(hashSetCollection);
В связи с этим, если у меня есть упорядоченный список и я orderedList.Distinct () .ToList() не могли бы вы сказать мне, сохранит ли заказ в упорядоченном списке? Он служит моей цели, если он гарантирует, что он всегда сохраняет первое появление дублирующего элемента и избавляется от более позднего появления. (У меня есть список, упорядоченный по релевантности ... нужен более релевантный, который нужно сохранить) – atlantis
@Ngu there не имеет смысла использовать Distinct() на HashSet, так как в любом случае дубликатов не будет –
Да, заказ сохраняется. – Graviton