SortedSetのコンストラクタで適切なIComparer<T>インターフェイスを指定することで、要素の大小関係比較時の動作をカスタマイズ出来ます。 例えば、比較の際に大文字小文字の違いを無視するようにするといったことが出来ます。
以下は、大文字小文字を無視し、アルファベット順とは逆順(Z-Aの順)になるようにソートするIComparer<string>を実装し、SortedSetでの並べ替え順をカスタマイズする例です。
大文字小文字の違いを無視し、アルファベット順とは逆順に並べ替えるSortedSetを作成する
Imports System
Imports System.Collections.Generic
' 大文字小文字の違いを無視し、アルファベット順とは逆順にソートするためのIComparer
Class CaseInsensitiveReverseStringComparer
Implements IComparer(Of String)
Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements IComparer(Of String).Compare
' StringComparer.OrdinalIgnoreCase.Compareとは逆の結果を返すようにする
Return -1 * StringComparer.OrdinalIgnoreCase.Compare(x, y)
End Function
End Class
Class Sample
Shared Sub Main()
Dim names() As String = New String() {"Alice", "Bob", "Charlie", "Dave", "Eve"}
Dim caseSensitiveSet As New SortedSet(Of String)(names, StringComparer.Ordinal)
Dim reverseCaseInsensitiveSet As New SortedSet(Of String)(names, New CaseInsensitiveReverseStringComparer())
Console.WriteLine("caseSensitiveSet")
Console.WriteLine(String.Join(", ", caseSensitiveSet))
Console.WriteLine(caseSensitiveSet.IsSupersetOf(New String() {"aLiCe", "BOB", "dave"}))
Console.WriteLine()
Console.WriteLine("reverseCaseInsensitiveSet")
Console.WriteLine(String.Join(", ", reverseCaseInsensitiveSet))
Console.WriteLine(reverseCaseInsensitiveSet.IsSupersetOf(New String() {"aLiCe", "BOB", "dave"}))
End Sub
End Class
実行結果
caseSensitiveSet Alice, Bob, Charlie, Dave, Eve False reverseCaseInsensitiveSet Eve, Dave, Charlie, Bob, Alice True
IComparer<T>インターフェイスや実装例については大小関係の定義と比較を参照してください。
文字列の大小関係、StringComparerについて詳しくは文字列と比較オプション・カルチャの並べ替え規則を参照してください。