Verständnisproblem : IComparable -> CompareTo

shuya

Grünschnabel
Guten Tag,

koennte mir jemand bitte sagen, warum Value den Wert 72 besitzt und nicht den Wert 56 ? Ich verstehe nicht die Reihenfolge der Zuweisung nachdem list.Sort(); abgefragt wird.

Vielen Dank
Unbenannt.jpg
 

Spyke

Premium-User
das Objekt welches aktuell geprüft wird hat den Wert 72.
56 hat das Objekt welches als parameter beim ComparerTo übergeben wurde, das objekt welches mit der 72 verglichen werden soll.
 

sheel

I love Asm
In welcher Reihenfolge sort die 4 Elemente miteinander vergleicht hängt davon ab, wie das
(schon fertige) sort programmiert wurde. Eine allgemeingültige Aussage gibts da nicht,
 

Spyke

Premium-User
die Sortierung läuft über QuickSort:

foglendes aus dem Reflector rauskopiert aus der mscorlib für .Net 2.0
Code:
internal static void QuickSort(TKey[] keys, TValue[] values, int left, int right, IComparer<TKey> comparer)
{
  do
  {
  int a = left;
  int b = right;
  int num3 = a + ((b - a) >> 1);
  ArraySortHelper<TKey, TValue>.SwapIfGreaterWithItems(keys, values, comparer, a, num3);
  ArraySortHelper<TKey, TValue>.SwapIfGreaterWithItems(keys, values, comparer, a, b);
  ArraySortHelper<TKey, TValue>.SwapIfGreaterWithItems(keys, values, comparer, num3, b);
  TKey y = keys[num3];
  do
  {
  while (comparer.Compare(keys[a], y) < 0)
  {
  a++;
  }
  while (comparer.Compare(y, keys[b]) < 0)
  {
  b--;
  }
  if (a > b)
  {
  break;
  }
  if (a < b)
  {
  TKey local2 = keys[a];
  keys[a] = keys[b];
  keys[b] = local2;
  if (values != null)
  {
  TValue local3 = values[a];
  values[a] = values[b];
  values[b] = local3;
  }
  }
  a++;
  b--;
  }
  while (a <= b);
  if ((b - left) <= (right - a))
  {
  if (left < b)
  {
  ArraySortHelper<TKey, TValue>.QuickSort(keys, values, left, b, comparer);
  }
  left = a;
  }
  else
  {
  if (a < right)
  {
  ArraySortHelper<TKey, TValue>.QuickSort(keys, values, a, right, comparer);
  }
  right = b;
  }
  }
  while (left < right);
}
 

Neue Beiträge