سؤال

ولقد بحثت هذا الأمر على النت ولكن أنا أسأل هذا للتأكد من أنني لم يحصلوا على شيء. هل هناك وظيفة المدمج في تحويل HashSets إلى قوائم في C #؟ ولست بحاجة إلى تجنب ازدواجية عناصر ولكني في حاجة للعودة إلى القائمة.

هل كانت مفيدة؟

المحلول

وهنا كيف لي أن تفعل ذلك:

   using System.Linq;
   HashSet<int> hset = new HashSet<int>();
   hset.Add(10);
   List<int> hList= hset.ToList();

وHashSet هو، بحكم التعريف، لا تحتوي على التكرارات. لذلك ليس هناك حاجة لDistinct.

نصائح أخرى

وخياران أي ما يعادل:

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);

وهناك ينق طريقة تمديد ToList<T>() التي سوف نفعل ذلك (ويعرف من على IEnumerable<T> الذي تنفذه HashSet<T>).

وفقط تأكد من using System.Linq; لك

وكما تعلمون من الواضح أن HashSet سيضمن لديك أي التكرارات، وهذه وظيفة تسمح لك بالعودة على أنها IList<T>.

List<ListItemType> = new List<ListItemType>(hashSetCollection);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top