kann jemand helfen, ich habe Probleme, eine Sortierung, ich dachte, ich hatte es sortiert, aber scheint nicht zu funktionieren.Problem mit benutzerdefinierten IComparer für Liste (sort) - C#
Ich habe eine Liste, die speichert die folgenden Werte
8,6,10,11,7
Ich habe auch eine andere Liste (Zubehör in meiner Klasse und es hat eine propert accessoryId Strom die Klassen genannt sind in der Reihenfolge der ID, die aktuell ist 6,7,8,10,11)
Daher muss ich sie von 6,7,8,10,11 nach der Reihenfolge aus der einfachen Liste, die 8 ist zu sortieren , 6,10,11,7
Ich habe meine icomparable (siehe unten) und ich rufe so - es gelangt aber etwas falsch ist, weil die Liste immer noch alle meine Klassen hat, aber immer noch in der Größenordnung von 6,7,8,10,11
// accesories is the IList<Accessories> (hence why i am use ToList)
// and sortOrder is the simple int list list<int>
accesories.ToList().Sort(new ItemTpComparer(sortOrder));
class ItemTpComparer : IComparer<Accessories>
{
private IList<int> otherList;
public ItemTpComparer(IList<int> otherList)
{
this.otherList = otherList;
}
#region IComparer<Accessories> Members
public int Compare(Accessories x, Accessories y)
{
if (otherList.IndexOf(x.AccessoryId) > otherList.IndexOf(y.AccessoryId))
return 1;
else if (otherList.IndexOf(x.AccessoryId) < otherList.IndexOf(y.AccessoryId))
return -1;
else
return 0;
// tried below also didn't work
//return otherList.IndexOf(x.AccessoryId) - otherList.IndexOf(y.AccessoryId);
Wow! Danke das ist wirklich gut .. ich habe "var sortedList = accesories.OrderBy (item => sortOrder.IndexOf (item.AccessoryId)). ToList();" Auch wenn ich weniger Nummern sortiere, zB sortiere ich 8,6 .. und sortiere .. es funktioniert was toll ist .. was passiert ist das die 8,6 am Ende der Ergebnisse sortiert wird ... ist es möglich um am Anfang 8,6 zu sortieren und dann weil es keine Sorten mehr gibt. Den Rest in die Reihenfolge am Ende legen? –
@mark smith: Das liegt daran, dass 'IndexOf' -1 für nicht existierende Objekte zurückgibt. Ich aktualisiere die Antwort für die absteigende Sortierung. –
Ein großes Dankeschön ... Fixed! –