2012-05-08 6 views
9

HashSet<string>をC#.Net 3.5でどのように並べ替えることができますか?ハッシュセットを並べ替える.Net 3.5

+4

できません。 'HashSet'は定義によってソートされません。配列であるソートされたコピーを作成しますか? – svick

+2

インプレイスまたはソートされたコピーをソートしますか? –

答えて

8

あなたは、たIComparer(すなわちhttp://msdn.microsoft.com/en-us/library/bb549422.aspx)またはいくつかのラムダ(私は通常、以下のとおり、私の比較に述語を使用)を使用して比較演算をインラインで使用していずれかをOrderBy方法を使用することができます。

リンクごとに参照してください:

 class Pet 
     { 
      public string Name { get; set; } 
      public int Age { get; set; } 
     } 

     public static void OrderByEx1() 
     { 
      Pet[] pets = { new Pet { Name="Barley", Age=8 }, 
          new Pet { Name="Boots", Age=4 }, 
          new Pet { Name="Whiskers", Age=1 } }; 

      IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age); 

      foreach (Pet pet in query) 
      { 
       Console.WriteLine("{0} - {1}", pet.Name, pet.Age); 
      } 
     } 

     /* 
     This code produces the following output: 

     Whiskers - 1 
     Boots - 4 
     Barley - 8 
     */ 

もっと読むhttp://msdn.microsoft.com/en-us/library/bb534966.aspx

+7

これは明らかにハッシュセット自体をソートしませんが、ハッシュセットのソートされたビューを返します。 – CodesInChaos

+3

はい、そうです.HashSetに含まれる値はソートされませんが、ソートされたビュー(またはコピー)でアクセスできます。 – ericosg

21

あなたはしません。定義により、HashSetはソートされません。

ソートされたハッシュセットが必要な場合は、SortedSetを使用する必要があります。このメソッドが公開するメソッドは、内容をソートする機能を含めて、基本的にHashSetによって提供されるメソッドの上位セットです。

+2

SortedSetには、HashSetを使用するときのような固有の値は含まれていませんが、適切な拡張メソッドを使用して構造体を構築するときは、Distinct値をロードできます。 – ericosg

+1

@ericosg私はあなたのコメントを理解していません。 – CodesInChaos

+1

私は、SortedSetでDistinct値が必要な場合は、それらの別個のビューを取得するために.Distinct()を呼び出す必要があることを意味します。ソートされたHashSetが必要な場合は、並べ替えられたビューを取得するために.OrderBy()を呼び出す必要があります。 – ericosg

8

HashSetの<文字列>は、設計によってソートされません。あなたはアイテムをソートしたい場合は(HashSetの<文字列>はIEnumerableを<文字列>を実装しているため)(〜が多いではない)、あなたはのOrderBy LINQメソッドを使用することができ、一度:hs.OrderBy(S => S)。あなたは、あなたがSortedDictionaryクラスを使用することができますソートHashSetのが必要な場合は

は - ちょうどTValueジェネリックパラメータのためにいくつかのダミータイプ(すなわちブール)を使用します。

SortedSetクラスは.NET 3.5では使用できません。

関連する問題