Laden...

C#-Sets

Erstellt von Dax vor 18 Jahren Letzter Beitrag vor 17 Jahren 8.403 Views
D
Dax Themenstarter:in
2 Beiträge seit 2006
vor 18 Jahren
C#-Sets

Hiho 🙂

Einige die von Delphi auf .NET umgestiegen sind und die D.NET auf keinen Fall nutzen wollen (was ja veständlich ist 😄), oder die, denen Chrome nicht gefällt (das gibts? 🤔 ) werden Sets als Datenstruktur garantiert kennen. Die anderen kennens etwas abstrakter aus der Mathematik, hoff ich 😉

Ich hab mich mal hingesetzt und eine Set-Implementierung auf .NET 2 geschrieben, die genau das leistet wie die altbekannten. Also alle Mengenoperationen, Zugehörigkeitstests und als kleines Extra auch noch IEnumerable<T> 🙂

Robert G war so nett meine Implementierung noch ein gutes Stück zu verbessern, und jetzt wollt ichs mal (auf seinen, na ja, Anreiz hin 😉 ) hier posten.

Viel Spass damit 🙂

lg,
Dax

3.003 Beiträge seit 2006
vor 18 Jahren

@Dax: da ich nicht von Delphi komme, wohl aber Mathe studiert , und dennoch noch nichts von "Sets" gehört habe, wäre eine kurze Erläuterung zum Thema Sets ganz interessant. 'n paar Links würden schon reichen, Google erschlägt mich, weil ich wahrscheinlich nicht richtig eingrenze.

Und den Code anzuschauen, um herauszufinden, was er tut, ist ein wenig...anstrengend 🙂.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo LaTino,

Set = Menge

herbivore

D
Dax Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren

Original von herbivore
Set = Menge Tjo, genau so 😉

"Meine" Sets sind ziemlich genau die Mengen der Mathematik. Du kannst Elemente hinzufügen und entfernen, prüfen ob Elemente enthalten sind, ein Set mit einem anderen zusammenfügen und ein Set wieder aus einem anderen entfernen.. Sowas eben^^ Zusätzlich kann man noch durch alle Elemente iterieren, was man weder in Delphi kann, noch in der Mathematik (glaube ich zumindest, habe aber nicht studiert 🙂)

Also.. sozusagen eigentlich nur Mengenlehre in C# ^^

@ikadingsbums: Gratulation. Ernsthaft. So nen sinnfreien Post hab ich in noch keinem Forum gesehen, und glaube mir, die Foren die ich sehe enthalten einige sinnfreie Postings. Willst du deinen Unmut über diese Implementation ausdrücken? Oder was willst du? Wenn du nur neidisch bist und sauer, weil du das nicht kannst: im Netz gibts einige gute Tutorials.

lg,
Dax

T
512 Beiträge seit 2006
vor 17 Jahren

Warum hast du denn das ISet<T> Interface explizit implementiert?
Ich seh da keinen Unterschied zu den anderen Funktionsdefinitionen.

Außerdem gefällt mir die * Operation nicht.
Eigentlich wärs schöner, wenn du &, | und \ überschreibst für Schnitt (was in beiden ist) Vereinigung (was in mindestens einem ist) und.
Einfach weil die Mengenoperationen Schnitt und Vereinigung sehr ähnlich zu den Bit-Operationen UND und ODER sind. Auch vom Symbol her.
Und A\B ist in der Mathematik der offizielle Operator für "A ohne B", was bei dir "-" ist. "+" und "-" könntest du ja beibehalten um einzelne Elemente hinzuzufügen, das gibts ja in Mathe nicht, da muss man ja erst ne einelementige Menge erzeugen.

Eine Art Multiplikation ist ja für Mengen auch definiert:

A*B = { (x,y) : x element A, y element B }

Dazu bräuchtest du noch eine Tupel-Implementation. (Bzw. Vektor)
Tupel ist aber nicht mehr Generisch möglich, weil im Prinzip jeder Typ mit allen möglichen anderen Typen in unbegrenzter Art verknüpft sein kann. Also z.B. auch (int, string, int, decimal, string, ...). Außer du definierst das Rekursiv... LinkedList artig... hmm 😉 also Tupel<int,Tupel<string,Tupel<int,Tupe<decimal,string>>>>

also:

foreach( T x in A )
{
    foreach( T y in B )
    {
        result.Insert( new Tupel( x, y ) );
    }
}

Wobei du bei Mengen und Tupeln aufpassen müsstest, dass alle gleiche Dimension haben.

Ist aber alles eigentlich nicht so wichtig 😁 Nur ein paar Vorschläge.

Iterieren kann man übrigens in Mathe wie auch in Pascal (oder Delphi). In Mathe sogar auf abzählbar unendlichen Mengen, glaub das geht in C# nicht 😜

e.f.q.

Aus Falschem folgt Beliebiges

347 Beiträge seit 2006
vor 17 Jahren

Original von Traumzauberbaum
Warum hast du denn das ISet<T> Interface explizit implementiert?
Ich seh da keinen Unterschied zu den anderen Funktionsdefinitionen. Das ist wohl ein Artefakt eines meiner Vorschläge. Damals war Dax' öffentliches Interface anders als da von ISet. Ist aber schon 'ne ganze weile her, ich weiß also nicht mehr wirklich warum ich es explizit implementiert hatte.
@Dax
Das ist defnitiv ein Kritikpunkt, redundater Code bzw. unnötige Sprünge sind nicht so hübsch. 😉