121. OrderBy IComparer overload

בהמשך לטיפים הקודמים –

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

לצורך פתרון זה, ניתן להשתמש בOverload של OrderBy שמקבל IComparer לפיו נבצע את ההשוואה.

לדוגמה (מהחיים האמיתיים), נניח שיש לנו רשימה של כתובות של תיקיות ואנחנו מעוניינים למיין אותם לפי רמת הקינון שלהם (כלומר שיופיעו קודם תיקיות אב, ורק אחר כך תיקיות בנות)

נוכל לעשות זאת בצורה הבאה:

נממש IComparer:

1
2
3
4
5
6
7
public class FolderLocationComparer : IComparer<string>
{
public int Compare(string x, string y)
{
// Use Path class to implement this.
}
}

כעת נבצע מיון באמצעותו:

1
2
IEnumerable<string> orderedByHierarchy =
folders.OrderBy(x => x, new FolderLocationComparer());

זהו, זה עשוי להתאים במקרים מסוימים.

המשך יום ממוין

שתף