RankedSetT Class |
Namespace: Kaos.Collections
[SerializableAttribute] public class RankedSet<T> : Btree<T>, ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable, ICollection, IReadOnlyCollection<T>, ISerializable, IDeserializationCallback
The RankedSetT type exposes the following members.
Name | Description | |
---|---|---|
RankedSetT | Initializes a new set instance that uses the default item comparer. | |
RankedSetT(IComparerT) | Initializes a new set instance that uses the supplied comparer. | |
RankedSetT(IEnumerableT) | Initializes a new set instance that contains items copied from the supplied collection. | |
RankedSetT(IEnumerableT, IComparerT) | Initializes a new set instance that contains items copied from the supplied collection. | |
RankedSetT(SerializationInfo, StreamingContext) | Initializes a new set instance that contains serialized data. |
Name | Description | |
---|---|---|
Capacity | Gets or sets the order of the underlying B+ tree structure. (Inherited from BtreeT.) | |
Comparer | Returns a wrapper of the method used to order items in the set. | |
Count | Gets the number of items in the set. | |
Max | Gets the maximum item in the set per the comparer. | |
Min | Gets the minimum item in the set per the comparer. |
Name | Description | |
---|---|---|
Add | Adds an item to the set and returns a success indicator. | |
Clear | Removes all items from the set. | |
Contains | Determines whether the set contains the supplied item. | |
CopyTo(T) | Copies the set to a compatible array, starting at the beginning of the array. | |
CopyTo(T, Int32) | Copies the set to a compatible array, starting at the supplied position. | |
CopyTo(T, Int32, Int32) | Copies a supplied number of items to a compatible array, starting at the supplied position. | |
CreateSetComparer | Returns an equality comparer that can be used to create a collection that contains sets. | |
CreateSetComparer(IEqualityComparerT) | Returns an equality comparer using a supplied comparer that can be used to create a collection that contains sets. | |
ElementAt | Gets the item at the supplied index. | |
ElementAtOrDefault | Gets the item at the supplied index or the default if the index is out of range. | |
ElementsBetween | Returns an enumerator that iterates over a range with the supplied bounds. | |
ElementsBetweenIndexes | Returns an enumerator that iterates over a range with the supplied index bounds. | |
ElementsFrom | Returns an enumerator that iterates over a range with the supplied lower bound. | |
Equals | Determines whether the specified object is equal to the current object. (Inherited from Object.) | |
ExceptWith | Removes all items in the supplied collection from the set. | |
Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) | |
First | Gets the minimum item in the set per the comparer. | |
GetEnumerator | Returns an enumerator that iterates thru the set. | |
GetHashCode | Serves as the default hash function. (Inherited from Object.) | |
GetObjectData | Returns the data needed to serialize the set. | |
GetType | Gets the Type of the current instance. (Inherited from Object.) | |
IndexOf | Gets the index of the supplied item. | |
IntersectWith | Removes all items that are not in a supplied collection. | |
IsProperSubsetOf | Determines whether the set is a proper subset of the supplied collection. | |
IsProperSupersetOf | Determines whether the set is a proper superset of the supplied collection. | |
IsSubsetOf | Determines whether the set is a subset of the supplied collection. | |
IsSupersetOf | Determines whether a set is a superset of the supplied collection. | |
Last | Gets the maximum item in the set per the comparer. | |
MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) | |
OnDeserialization | Implements the deserialization callback and raises the deserialization event when completed. | |
Overlaps | Determines whether the set and a supplied collection share common items. | |
Remove | Removes the supplied item from the set. | |
RemoveAt | Removes the item at the supplied index from the set. | |
RemoveRange | Removes an index range of items from the set. | |
RemoveWhere | Removes all items that match the condition defined by the supplied predicate from the set. | |
Replace(T) | Replace an item if present. | |
Replace(T, Boolean) | Replace an item or optionally add it if missing. | |
Reverse | Returns an IEnumerable that iterates thru the set in reverse order. | |
SetEquals | Determines whether the set and the supplied collection contain the same items. | |
Skip | Bypasses a supplied number of items and yields the remaining items. | |
SkipWhile(FuncT, Boolean) |
Bypasses elements as long as a supplied condition is true and yields the remaining items.
| |
SkipWhile(FuncT, Int32, Boolean) |
Bypasses elements as long as a supplied index-based condition is true and yields the remaining items.
| |
SymmetricExceptWith | Modifies the set so that it contains only items that are present either in itself or in the supplied collection, but not both. | |
ToString | Returns a string that represents the current object. (Inherited from Object.) | |
TryGet | Gets the actual item for the supplied search item. | |
TryGetGreaterThan | Gets the least item greater than the supplied item. | |
TryGetGreaterThanOrEqual | Gets the least item greater than or equal to the supplied item. | |
TryGetLessThan | Gets the greatest item that is less than the supplied item. | |
TryGetLessThanOrEqual | Gets the greatest item that is less than or equal to the supplied item. | |
UnionWith | Add all items in other to this set that are not already in this set. |
Name | Description | |
---|---|---|
ICollectionTAdd | Adds an item to the set. | |
ICollectionCopyTo | Copies the set to a compatible array, starting at the supplied array index. | |
IEnumerableTGetEnumerator | Returns an enumerator that iterates thru the set. | |
IEnumerableGetEnumerator | Returns an enumerator that iterates thru the collection. | |
ISerializableGetObjectData | Returns the data needed to serialize the set. | |
ICollectionTIsReadOnly | Indicates that the collection is not read-only. | |
ICollectionIsSynchronized | Indicates that the collection is not thread safe. | |
IDeserializationCallbackOnDeserialization | Implements the deserialization callback and raises the deserialization event when completed. | |
ICollectionSyncRoot | Gets an object that can be used to synchronize access to the collection. |
This class emulates and extends SortedSetT while significantly improving performance on large collections.
Optimized instance methods with the signatures of LINQ methods have been implemented:
Indexing enhancements include:
Optimized range enumerators are provided:
An equivalent to BCL's GetViewBetween(T, T) has not implemented for performance reasons. However, ElementsBetween(T, T) is available for range enumeration.
This program shows some basic operations of this class.
using System; using Kaos.Collections; namespace ExampleApp { class RsExample01 { static bool IsPolynymous (string name) => name.Contains (" "); static void Main() { var musicians = new RankedSet<string> (StringComparer.InvariantCultureIgnoreCase); foreach (var m1 in new string[] { "Falco", "k.d. lang", "Madonna", "Tom Petty", "Joni Mitchell", "Grimes", "Warren Zevon" }) musicians.Add (m1); Console.WriteLine ("Candidates:"); foreach (var item in musicians) Console.WriteLine ($" {item}"); musicians.Remove ("Falco"); musicians.RemoveWhere (IsPolynymous); musicians.RemoveRange (1, musicians.Count-1); Console.WriteLine ("\nFavorite:"); foreach (var item in musicians) Console.WriteLine ($" {item}"); } /* Output: Candidates: Falco Grimes Joni Mitchell k.d. lang Madonna Tom Petty Warren Zevon Favorite: Grimes */ } }
Next is an example showing binary serialization round tripped.
Note: Serialization is not supported in .NET Standard 1.0.
using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using Kaos.Collections; namespace ExampleApp { [Serializable] public class PersonComparer : Comparer<Person> { public override int Compare (Person x, Person y) { return x==null? (y==null? 0 : -1) : (y==null? 1 : String.Compare (x.ToString(), y.ToString())); } } [Serializable] public class Person : ISerializable { public string First { get; private set; } public string Last { get; private set; } public Person (string first, string last) { this.First = first; this.Last = last; } protected Person (SerializationInfo info, StreamingContext context) { this.First = (String) info.GetValue ("First", typeof (String)); this.Last = (String) info.GetValue ("Last", typeof (String)); } public virtual void GetObjectData (SerializationInfo info, StreamingContext context) { info.AddValue ("First", First, typeof (String)); info.AddValue ("Last", Last, typeof (String)); } public override string ToString() => Last + ", " + First; } class RsExample05 { static void Main() { var set1 = new RankedSet<Person> (new PersonComparer()); set1.Add (new Person ("Hugh", "Mann")); set1.Add (new Person ("Hammond", "Egger")); string fileName = "Persons.bin"; IFormatter formatter = new BinaryFormatter(); SerializePersons (fileName, set1, formatter); Console.WriteLine ($"Wrote {set1.Count} items to file '{fileName}'."); Console.WriteLine (); RankedSet<Person> set2 = DeserializePersons (fileName, formatter); Console.WriteLine ($"Read back {set2.Count} items:"); foreach (var p2 in set2) Console.WriteLine (p2); } public static void SerializePersons (string fn, RankedSet<Person> set, IFormatter formatter) { using (var fs = new FileStream (fn, FileMode.Create)) { formatter.Serialize (fs, set); } } static RankedSet<Person> DeserializePersons (string fn, IFormatter formatter) { using (var fs = new FileStream (fn, FileMode.Open)) { return (RankedSet<Person>) formatter.Deserialize (fs); } } /* Output: Wrote 2 items to file 'Persons.bin'. Read back 2 items: Egger, Hammond Mann, Hugh */ } }