Laden...

Algorithmus für Listen-Kombinationen

Erstellt von M@TUK vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.658 Views
M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 14 Jahren
Algorithmus für Listen-Kombinationen

Hi!

Ich steh grad etwas auf der Leitung...

Ich hab 3 Listen (List<string>) in denen können Elemente enthalten sein.

Ich such nun nach einer Möglichkeit alle möglichen Kombinationen
zu "berechnen".

Also zb.

List 1 = {A, B, C, D, E}
List 2 = { 1, 2, 3}
List 3 = {@, ?, !}

Und rauskommen sollte dann:

A1
A1@
A1?
...
1A?
1B?
1C?
...

Wie geh ich hier am besten vor?

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo M@TUK,

Wie geh ich hier am besten vor?

du benutzt die Forensuche und findest fertige Lösungen (ok, vermutlich nur für den Fall mit einer Liste; die sollten sich aber leicht auf drei Listen erweitern lassen). Bitte poste die besten Treffer hier. Vielen Dank!

Mal abgesehen davon, dass wenn die Anzahl der Listen klein ist (hier sind es ja drei), du einfach (drei) geschachtelte foreach-Schleifen nehmen kannst.

herbivore

888 Beiträge seit 2007
vor 14 Jahren
M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 14 Jahren

Mal abgesehen davon, dass wenn die Anzahl der Listen klein ist (hier sind es ja drei), du einfach (drei) geschachtelte foreach-Schleifen nehmen kannst.

So hab ich dann auch gemacht...

Gelöschter Account
vor 14 Jahren

du solltest eine beschränkung der maximalen größe miteinbauen.
aktuell hast du abc. alles vom typ string. in meinen kurzen tests habe ich meist nach 9 millionen objektreferenzen eine outofmemory-exception bekommen. unabhängig davon auf welchem rechner ich war. auf meinem entwicklerrechner hatte cih z.b. noch 3 gb freien speicher und dennoch hab ich diese exception bekommen.

in unserem projekt existieren z.b. extrem viele objekte und es ist mit der zeit derart angewachsen, das es sich bei uns nun als großes problem darstellt.

empfehlen würde ich dir daher die oben genannte formel am anfang der emthode auszuführen und

  1. die ergebnissliste damit vorzuinitialisieren. das gibt dir einen performanceboost, da die liste dann automatisch weiß wie groß sie werden soll und entsprechend speicher reservieren kann.
  2. gleich eine exception oder irgendwie anders reagieren, wenn z.b. 8 millionen überschritten werden.