لماذا هي طريقة القائمة.
-
28-09-2019 - |
سؤال
لدي قائمة بالعناصر في قائمة عامة:
- A1 (فهرس الفرز 1)
- A2 (فرز فهرس 2)
- B1 (فهرس الفرز 3)
- B2 (فهرس الفرز 3)
- B3 (فهرس الفرز 3)
المقارنة عليهم يأخذ النموذج:
this.sortIndex.CompareTo(other.sortIndex)
عندما أقوم بقائمة. sort () في قائمة العناصر ، أحصل على الطلب التالي:
- A1
- A2
- B3
- B2
- B1
من الواضح أنه كان يعمل بمعنى أن فهارس الفرز بالترتيب الصحيح ، لكنني لا أريد حقًا إعادة ترتيب العناصر "B".
هل هناك أي قرص يمكنني القيام به لمقاربي لإصلاح هذا؟
المحلول
OrderBy
يحافظ على طلب العناصر المتساوية:
myList = myList.OrderBy(item => item.SortIndex).ToList();
نصائح أخرى
StableSort()
طريقة التمديد ل List<T>
هو هنا
يمكنك تغيير المقارن الخاص بك للقيام برسم ثانوي على القيمة:
if (this.sortIndex.CompareTo(other.sortIndex) == 0) // same sortIndex
{
return this.Value.CompareTo(other.Value);
}
return 0;
يستخدم Sort Quicksort ، ولا يضمن التسلسل الأصلي في حالة المقارنة المساواة.
إذا كنت لا تزال ترغب في استخدام list.sort ، يمكنك إضافة مقارنة ثانية مع الفهرس الأصلي مثل:
int c = this.sortIndex.CompareTo(other.sortIndex);
if (c == 0)
c = this.originalIndex.CompareTo(other.originalIndex);
return c;
وإلا يمكنك الفرز مع خوارزميات "مستقرة" أخرى (على سبيل المثال linq orderby).
لا تنتمي إلى StackOverflow