125. SortedSet

כמו בטיפים הקודמים, לפעמים אנחנו רוצים לשמור מידע, כך שהוא תמיד יהיה ממוין.

במידה ואנחנו מעוניינים לשמור איברים בסדר ממוין כל שכל איבר יופיע בדיוק פעם אחת.

דרך אחת אפשרית לעשות זאת היא להשתמש בSortedDictionary (או בSortedList) בצורה מעוותת – כלומר להשתמש רק בKey שלהם, ולשים בValue, למשל bool.

אלא שדרך זו מעוותת ולא בדיוק נכונה.

בדומה לטיפ מספר 19, בו פגשנו HashSet שתפקידו היה לשמור כל איבר בדיוק פעם אחת, הוסיפו בFramework 4.0 טיפוס חדש ששמו SortedSet המאפשר לנו לשמור כל איבר בדיוק פעם אחת, ושהאיברים יהיו ממויינים.

בפועל, המבנה ממומש באמצעות עץ אדום-שחור, כמו SortedDictionary, אלא שהפעם אנחנו שומרים רק את הKeys.

קיים גם פה overload לConstructor המאפשר לנו להגדיר את הIComparer איתו אנחנו רוצים שהSortedSet ימיין איברים.

HashSet וSortedSet מממשים ממשק משותף ששמו ISet.

בנוסף, קיימים שני Properties מיוחדים שיש רק לSortedSet והם:

1
2
public T Min { get; }
public T Max { get; }

המאפשרים לנו למצוא את המינימום ומקסימום בצורה פשוטה.

קיימות גם עוד שתי פונקציות ייחודיות לSortedSet<T> והן:

1
2
public virtual SortedSet<T> GetViewBetween(T lowerValue, T upperValue)
public IEnumerable<T> Reverse()

הראשונה מאפשרת לנו למצוא את כל האיברים בתחום מסוים.

השנייה מאפשרת לנו להפוך את הסדר של האיברים בSortedSet<T> בצורה פשוטה.

סופ"ש ממוין! (ולא חסר ערך)

שתף