![]() |
[C#] Sets
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Leute :)
Mir war langweilig, also hab ich mal eine C#-Implementation der aus Delphi bekannten Mengen/Sets versucht. Natürlich ohne Boxung/Unboxing der Elemente, sondern einfach über Generics :) (Ich war so frech und hab die Sets gleich in den System.Collections.Generic-Namespace getan^^) Deswegen brauchen die Sets auch .net 2 ;) An Operatoren gibts alles was man aus Delphi kennt: +, -, *, <=, >=, != und ==. Zusätzlich hab ich noch XOR als ^ eingefügt :) Natürlich sind die Sets IEnumerable und IEnumerable<T> sowie ICloneable. IEquatable<Set<T>> nicht zu vergessen :mrgreen: Also alles in allem viel Wind um nichts, wie bei allen meinen Codes :lol: Wenn jemand eine Idee hat, wie man das ganze verbessern könnte - immer her damit :) PS: Ihr könntet langsam mal cs als Endung erlauben :zwinker: Edit: IEquatable sollte ja auf Set<T> sein, nicht <T> :oops: |
Re: [C#] Sets
Och menno... stell dir vor: Bin grad am C# lernen und hatte grad vor zur Übung Sets in C# zu implementieren. SharpDevelop is schon gestartet, guck grad nochmal in der DP rund und was seh ich da: Mal wieder jemand schneller... :twisted:
Was solls, hatte sowieso vor zuerst ne .NET 1.1-Version zu basteln und später eine für .NET 2.0. Letzteres hat sich dann ja erübrigt... Zitat:
- warum hast du Reset() 2 mal implementiert? - für was n leeres Dispose()? - < und > könnte man noch überladen - die Listen-Klasse, die du zur internen Speicherung verwendest, gibts unter .NET 1.1 noch nicht, oder hab ich die irgendwo übersehen? - wäre es nicht ne Überlegung wert die Sets als Wertetypen(d.h. als struct, statt class) zu implementieren - wir wärs noch mit [Serializable] Ansonsten: Klasse Klassen! :thumb: mfg Christian |
Re: [C#] Sets
Hi r2d2 :) ;)
Tut mir Leid wenn ich dir damit zuvorgekommen bin ^^ Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
bis dann, Dax |
Re: [C#] Sets
Öhm, im zip ist nur eine .proj-datei...
|
Re: [C#] Sets
Also ich würde vorschlagen, A < B ist "A ist teilmenge von B", A > B ist "A ist Obermenge von B". :)
EDIT: der rote kasten funktioniert! :) |
Re: [C#] Sets
Zitat:
Zitat:
|
Re: [C#] Sets
Hallo :hi:
Zitat:
Zitat:
Zitat:
Wärend dessen is mir noch n bisschen was aufgefallen: - sollte als Enumerator nicht
Code:
reichen? Oder geht das wegen der Generics nicht?
public IEnumerator GetEnumerator()
{ return inner.GetEnumerator(); } - Wie wärs mit m implicit operator; bei mir(ohne generics) funktioniert das nicht, da ich object als implicit-Parameter nehmen müsste und set ja von object abgeleitet ist; bei deiner Version könnts aber klappen - Leider kann man "in" nicht überladen. Hab dafür also einfach "%" genommen. Sieht zwar nicht so toll aus, funktioniert aber... Ah und nochwas is mir aufgefallen:
Code:
Warum benutzt du einmal AddRange und einmal Include. Du könntest du für beides Include verwenden...
public static Set<T> operator +(Set<T> left, Set<T> right)
{ Set<T> result = new Set<T>(); result.inner.AddRange(left.inner); result.Include(right); return result; } mfg Christian |
Re: [C#] Sets
Heya :)
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: [C#] Sets
Ich weiss nicht, ob bei zwei gleichen Mengen A und B die Aussage "A ist Teilmenge von B" bzw. "A ist Obermenge von B" stimmen...
Vielleicht steht das ja in der Formelsammlung... AHA! Zitat:
Rein praktisch sollte aber aufgrund des Vorhandenseins des Operators "<=" der Ausdruck A < B als "A echte Teilmenge von B" interpretiert werden. Im übrigen gibt es mathematisch keine "Obermenge" (zumindest meine Formelsammlung kennt das nicht); A > B sollte somit als B < A definiert werden. |
Re: [C#] Sets
Zitat:
Zitat:
Code:
Is nix weltbewegendes, spart aber n paar Buchstaben...
public static implicit operator Set(object obj)
{ Set result = new Set(); result.Include(obj); return result; } Ich hab das nachgebaut, indem ich + und - mehrfach überladen hab... Zitat:
Ah und nochwas. Wie wärs mit sowas:
Code:
public Set(params T[] items)
{ ... } Zitat:
Zitat:
Im Prinzip stört an deiner Formelsammlung also nur das Wort "Gleichwertig"... Zitat:
Zitat:
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz