[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]
Represents a collection of objects that is maintained in sorted order.
Namespace:
System.Collections.Generic
Assembly:
System (in System.dll)
Visual Basic (Declaration)
<SerializableAttribute> _
Public Class SortedSet(Of T) _
Implements ISet(Of T), ICollection(Of T), _
IEnumerable(Of T), ICollection, IEnumerable, ISerializable, IDeserializationCallback
Dim instance As SortedSet(Of T)
[SerializableAttribute]
public class SortedSet<T> : ISet<T>,
ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable,
IDeserializationCallback
[SerializableAttribute]
generic<typename T>
public ref class SortedSet : ISet<T>,
ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable,
IDeserializationCallback
[<SerializableAttribute>]
type SortedSet<'T> =
class
interface ISet<'T>
interface ICollection<'T>
interface IEnumerable<'T>
interface ICollection
interface IEnumerable
interface ISerializable
interface IDeserializationCallback
end
Type Parameters
- T
The type of elements in the set.
A SortedSet<(Of <(T>)>) maintains a sorted order as elements are inserted and deleted without affecting performance. Duplicate elements are not allowed.
The following example demonstrates a SortedSet<(Of <(T>)>) class that is created with the constructor that takes an IComparer<(Of <(T>)>) as a parameter. This comparer (ByFileExtension) is used to sort a list of file names by their extensions.
This example demonstrates how to create a sorted set of media file names, remove unwanted elements, view a range of elements, and compare the set with another sorted set.
Imports System.Collections
Imports System.Collections.Generic
Imports System.IO
Module Module1
Sub Main()
Try
' Get a list of the files to use for the sorted set.
Dim files1 As IEnumerable = _
Directory.EnumerateFiles("\\archives\2007\media", "*", _
SearchOption.AllDirectories)
' Create a sorted set using the ByFileExtension comparer.
Dim mediaFiles1 As SortedSet(Of String) = _
New SortedSet(Of String)(New ByFileExtension)
' Note that there is a SortedSet constructor that takes an IEnumerable,
' but to remove the path information they must be added individually.
For Each f As String In files1
mediaFiles1.Add(f.Substring((f.LastIndexOf("\") + 1)))
Next
' Remove elements that have non-media extensions. See the 'isDoc' method.
Console.WriteLine("Remove docs from the set...")
Console.WriteLine(vbTab & "Count before: {0}", mediaFiles1.Count.ToString)
mediaFiles1.RemoveWhere(AddressOf isDoc)
Console.WriteLine(vbTab & "Count after: {0}", mediaFiles1.Count.ToString)
Console.WriteLine()
' List all the avi files.
Dim aviFiles As SortedSet(Of String) = mediaFiles1.GetViewBetween("avi", "avj")
Console.WriteLine("AVI files:")
For Each avi As String In aviFiles
Console.WriteLine(vbTab & "{0}", avi)
Next
Console.WriteLine()
' Create another sorted set.
Dim files2 As IEnumerable = _
Directory.EnumerateFiles("\\archives\2008\media", "*", _
SearchOption.AllDirectories)
Dim mediaFiles2 As SortedSet(Of String) = _
New SortedSet(Of String)(New ByFileExtension)
For Each f As String In files2
mediaFiles2.Add(f.Substring((f.LastIndexOf("\") + 1)))
Next
' Remove elements in mediaFiles1 that are also in mediaFiles2.
Console.WriteLine("Remove duplicates (of mediaFiles2) from the set...")
Console.WriteLine(vbTab & "Count before: {0}", _
mediaFiles1.Count.ToString)
mediaFiles1.ExceptWith(mediaFiles2)
Console.WriteLine(vbTab & "Count after: {0}", _
mediaFiles1.Count.ToString)
Console.WriteLine()
Console.WriteLine("List of mediaFiles1:")
For Each f As String In mediaFiles1
Console.WriteLine(vbTab & "{0}", f)
Next
' Create a set of the sets.
Dim comparer As IEqualityComparer(Of SortedSet(Of String)) = _
SortedSet(Of String).CreateSetComparer()
Dim allMedia As HashSet(Of SortedSet(Of String)) = _
New HashSet(Of SortedSet(Of String))(comparer)
allMedia.Add(mediaFiles1)
allMedia.Add(mediaFiles2)
Catch ioEx As IOException
Console.WriteLine(ioEx.Message)
Catch AuthEx As UnauthorizedAccessException
Console.WriteLine(AuthEx.Message)
End Try
End Sub
' Defines a predicate deligate to use
' for the SortedSet.RemoveWhere method.
Private Function isDoc(ByVal s As String) As Boolean
If (s.ToLower.EndsWith(".txt") _
OrElse (s.ToLower.EndsWith(".doc") _
OrElse (s.ToLower.EndsWith(".xls") _
OrElse (s.ToLower.EndsWith(".xlsx") _
OrElse (s.ToLower.EndsWith(".pdf") _
OrElse (s.ToLower.EndsWith(".doc") _
OrElse s.ToLower.EndsWith(".docx"))))))) Then
Return True
Else
Return False
End If
End Function
' Defines a comparer to create a sorted set
' that is sorted by the file extensions.
Public Class ByFileExtension
Implements IComparer(Of String)
Dim xExt, yExt As String
Dim caseiComp As CaseInsensitiveComparer = _
New CaseInsensitiveComparer
Public Function Compare(ByVal x As String, ByVal y As String) _
As Integer
' Parse the extension from the file name.
xExt = x.Substring(x.LastIndexOf(".") + 1)
yExt = y.Substring(y.LastIndexOf(".") + 1)
' Compare the file extensions.
Dim vExt As Integer = caseiComp.Compare(xExt, yExt)
If vExt <> 0 Then
Return vExt
Else
' The extension is the same,
' so compare the filenames.
Return caseiComp.Compare(x, y)
End If
End Function
End Class
End Module
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
class Program
{
static void Main(string[] args)
{
try
{
// Get a list of the files to use for the sorted set.
IEnumerable<string> files1 =
Directory.EnumerateFiles(@"\\archives\2007\media",
"*", SearchOption.AllDirectories);
// Create a sorted set using the ByFileExtension comparer.
SortedSet<string> mediaFiles1 =
new SortedSet<string>(new ByFileExtension());
// Note that there is a SortedSet constructor that takes an IEnumerable,
// but to remove the path information they must be added individually.
foreach (string f in files1)
{
mediaFiles1.Add(f.Substring(f.LastIndexOf(@"\") + 1));
}
// Remove elements that have non-media extensions.
// See the 'isDoc' method.
Console.WriteLine("Remove docs from the set...");
Console.WriteLine("\tCount before: {0}", mediaFiles1.Count.ToString());
mediaFiles1.RemoveWhere(isDoc);
Console.WriteLine("\tCount after: {0}", mediaFiles1.Count.ToString());
Console.WriteLine();
// List all the avi files.
SortedSet<string> aviFiles = mediaFiles1.GetViewBetween("avi", "avj");
Console.WriteLine("AVI files:");
foreach (string avi in aviFiles)
{
Console.WriteLine("\t{0}", avi);
}
Console.WriteLine();
// Create another sorted set.
IEnumerable<string> files2 =
Directory.EnumerateFiles(@"\\archives\2008\media",
"*", SearchOption.AllDirectories);
SortedSet<string> mediaFiles2 = new SortedSet<string>(new ByFileExtension());
foreach (string f in files2)
{
mediaFiles2.Add(f.Substring(f.LastIndexOf(@"\") + 1));
}
// Remove elements in mediaFiles1 that are also in mediaFiles2.
Console.WriteLine("Remove duplicates (of mediaFiles2) from the set...");
Console.WriteLine("\tCount before: {0}", mediaFiles1.Count.ToString());
mediaFiles1.ExceptWith(mediaFiles2);
Console.WriteLine("\tCount after: {0}", mediaFiles1.Count.ToString());
Console.WriteLine();
Console.WriteLine("List of mediaFiles1:");
foreach (string f in mediaFiles1)
{
Console.WriteLine("\t{0}",f);
}
// Create a set of the sets.
IEqualityComparer<SortedSet<string>> comparer =
SortedSet<string>.CreateSetComparer();
HashSet<SortedSet<string>> allMedia =
new HashSet<SortedSet<string>>(comparer);
allMedia.Add(mediaFiles1);
allMedia.Add(mediaFiles2);
}
catch(IOException ioEx)
{
Console.WriteLine(ioEx.Message);
}
catch (UnauthorizedAccessException AuthEx)
{
Console.WriteLine(AuthEx.Message);
}
}
// Defines a predicate delegate to use
// for the SortedSet.RemoveWhere method.
private static bool isDoc(string s)
{
if (s.ToLower().EndsWith(".txt") ||
s.ToLower().EndsWith(".doc") ||
s.ToLower().EndsWith(".xls") ||
s.ToLower().EndsWith(".xlsx") ||
s.ToLower().EndsWith(".pdf") ||
s.ToLower().EndsWith(".doc") ||
s.ToLower().EndsWith(".docx"))
{
return true;
}
else
{
return false;
}
}
}
// Defines a comparer to create a sorted set
// that is sorted by the file extensions.
public class ByFileExtension : IComparer<string>
{
string xExt, yExt;
CaseInsensitiveComparer caseiComp = new CaseInsensitiveComparer();
public int Compare(string x, string y)
{
// Parse the extension from the file name.
xExt = x.Substring(x.LastIndexOf(".") + 1);
yExt = y.Substring(y.LastIndexOf(".") + 1);
// Compare the file extensions.
int vExt = caseiComp.Compare(xExt, yExt);
if (vExt != 0)
{
return vExt;
}
else
{
// The extension is the same,
// so compare the filenames.
return caseiComp.Compare(x, y);
}
}
}
System..::.Object
System.Collections.Generic..::.SortedSet<(Of <(T>)>)
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
.NET Framework
Supported in: 4
.NET Framework Client Profile
Supported in: 4
Reference