Liste auf selbe werte überprüfen
-
Hi,
Ich erstelle eine Liste mit :
name.add(gruppen.name, gruppen)
diese Liste wird alphabetisch sortiert.
Jetzt ist das problem, das ab und zu ger selbe gruppen.name schon existiert, und wirft mir daher eine exception.
Wie ich die Liste am besten auf die selben Namen überprüfen.
Vor dem hinzufügen durch die ganze Liste gehen und schauen ob der Name bereits dort drinnen ist?Und wie sage ich der sortierung dan das zuerst der name mit der tieferen dataId aufgelistet werden soll?
Bzw. kann ich das schon von anfang an sagen und mir so eine überprüfung sparen?
-
Naja moment mal, was benutzt denn du für eine "Liste"?
Für mich klingt das danach das du ein Dictionary<string,Gruppe> verwenden solltest, und vorher mit ContainsKey(gruppen.name) überprüfst ob der Name schon existiert, wenn nicht einfügen.
Zu deiner zweiten Frage, kannst du bei Sort() entweder einen Comparison Delegate angeben oder du lässt deine Klasse "Gruppe"(wenn diese existiert) das IComparable Interface so implemntieren das eben die unterste Id die kleinste ist oder so.
-
Hey,
Also erstmal ich hatte einen SortedList dafür benutzt.
Jetzt habe ich mir mal angeschaut wie so ein Comparison Delegate funktioniert, und das jetzt so benutzt:
List<ISearchTemplateGroup> test = new List<ISearchTemplateGroup>();
List<ISearchTemplateGroup> groupsTest = searchTemplateGroupManager.GetSearchTemplateGroups(Id);
foreach (ISearchTemplateGroup templateGroup in groupsTest)
{
test.Add(templateGroup);
}War es das wo du gemeint hattest?
Falls ja, vielen Dank jetzt funktionierts
-
Er meinte das eher so:
private void OnDo(IEnumerable<ISearchTemplateGroup> anyGroups) { var test = new List<ISearchTemplateGroup>(); test.AddRange(anyGroups); test.Sort(SortById); } private static int SortById(ISearchTemplateGroup lhv, ISearchTemplateGroup rhv) { return lhv.Id.CompareTo(rhv.Id); }
So hast du im Prinzip eine SortedList simuliert, mit dem Vorteil das du das return von SortById einfach umkehren kannst um die Reihenfolge zu ändern.
Die nächste Idee war das dein ISearchTemplateGroup das IComparable implementiert, dann reicht ein einfaches test.Sort();
Da musst du halt schauen ob es sich lohnt.