C# Sortierung von ArrayList

Quaussi

Ensign
Registriert
Aug. 2013
Beiträge
244
hallo user,

ich habe hier ein kleines programm geschrieben, dass leider nicht funktioniert...quelle: galileo computing
ich sehe den fehler leider nicht :(
vielleicht kann mir einer von euch weiter helfen
vielen lieben dank


auftretender fehler: am arrList.Sort(); -> Fehler beim Vergleichen von zwei Elementen im Array


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sortieren
{
public interface IComparable { int CompareTo(object obj); }

class Program
{
static void Main(string[] args)
{
ArrayList arrList = new ArrayList();

HoldValue obj1 = new HoldValue(17); arrList.Add(obj1);
HoldValue obj2 = new HoldValue(110); arrList.Add(obj2);
HoldValue obj3 = new HoldValue(5); arrList.Add(obj3);
arrList.Sort();

int i = 0;
foreach (HoldValue temp in arrList) { Console.WriteLine("Element{0} mit den Wert: {1}", i, temp.intVar); i++; }
Console.ReadLine();
}
}


public class HoldValue : IComparable
{
public int intVar;
public HoldValue(int x) { intVar = x; }

public int CompareTo(object obj)
{
HoldValue val = (HoldValue)obj;
if (val.intVar < this.intVar) return 1;
if (val.intVar == this.intVar) return 0;
return -1;
}
}
}
 
Hi,

dann mach einen Breakpoint bevor der Fehler auftritt und debugge das Ganze, schau dir die arrList an und ob die Elemente drin korrekt sind.

VG,
Mad
 
Wenn du Sort ein Delegate übergibst, kannst du sogar selber sagen wie Sortiert werden soll:)

Vielleicht klappts dann damit. Auf ne ArrayList habe ich selber noch nie Sort verwendet. Probier mal ein Array aus object's, das sollte auch gehen.
 
war das erste, was ich getan hatte
"arrList" ist richtig beschrieben
so was ist ziemlich deprimierend
 
Würde empfehlen wenn dann die neuere Version zu nehmen.

Visual C# 2010


Scheint mir auf erstem blick tatsächlich nicht ganz richtig zu sein das Beispiel...
 
Vielleicht solltest du das Interface IComparable nicht selbst definieren sondern das aus Collections nehmen...

Diese Zeile löschen:
public interface IComparable { int CompareTo(object obj); }
 
Zuletzt bearbeitet:
Was genau musst du überhaupt machen? Vielleicht sind Listen eine alternative für dich:)

List<int> liste= new List<int>();
liste.add(3);
liste.add(2);
liste.Sort();

liste[0]=2;
liste[1]=3;
 
IComparable ist ein System-Interface. Die ArrayList kann mit deiner "Nachbildung" nichts anfangen und wirft deshalb einen Fehler.
Wirf folgende Deklaration raus und es sollte klappen:
Code:
public interface IComparable { int CompareTo(object obj); }

Noch zwei Amerkungen:
- Verwende zum Code posten bitte die Code-Tags; ist einfach besser lesbar.
- ArrayList sollte man i. d. R. nicht mehr verwenden, weil List<T> die bessere Alternative ist. Wenn dein Buchbeispiel mit ArrayList arbeitet ist das natürlich ok, nur in der Praxis sollte man List<T> benutzen.
 
super sache.....ich habe den interface auskommentiert

ich danke euch für die schnellen rückantworten

das mit List<T> werde ich morgen versuchen


so feierabend
 
Einfacher wäre das Ganze nochmals mit LINQ

Code:
var list = new List<HoldValue>();

list.Add(new HoldValue(17));
list.Add(new HoldValue(110));
list.Add(new HoldValue(5));

var orderedlist = list.OrderBy(x => x.intVar);

Weiß jetzt nicht ob alles syntax-mäßig korrekt ist

mfg
 
Einfacher wäre es, das Array in der richtigen Reihenfolge anzulegen... er macht es um was zu lernen, und nicht um die beste Lösung zu finden.

Natürlich kann man mit solchen Closures Ausdrücke kompakter gestalten... aber ob der Lern-Effekt dadurch größer ist, sei jetzt mal dahingestellt.

In der Mathematik fängt man auch mit kleinen Zahlenbereichen an, und nicht direkt mit komplexen Zahlen... das hat schon seine Gründe...
 
Zurück
Oben