![]() |
[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 |
Re: [C#] Sets
Zitat:
Ich habe Dax gestern meine Interpretation des originalen Codes geschickt. Wie es aussieht scheint einiges in der jetzigen Version übernommen worden zu sein. ;) Wenn es die Ästhetik zuließ wurde das generische Interface durch eine öffentliche Methode implizit implementiert, dort wirst du nur 2 Methoden mit ähnlicher Signatur finden. Wenn selbst die generische Interface methode zu hässlich wäre, wurde sie ebenfalls explizit implementiert. Ich bin zum Beispiel kein Fan davon GetEnmerator öffentlich sichtbar zu machen, foreach braucht nur IEnumerable(<T>) aber diese hässeliche Methode bläht Intellisense IMHO nur unnötig auf... Zitat:
Ein implicit mit einem object parameter macht das Set plötzlich zuweisbar von allen Typen, wodurch man fast sämtliche Compilerprüfung verlieren würde. :? Zitat:
Wer außer dir wüte was hier passiert? Zitat:
Zitat:
Gibt es eigentlich irgendeinen Grund für dich mit 1.1 festzusitzen? Kann ich wirklich nicht nachvollziehen. Immer dieses ekelhafte object-Gefriemel. :? |
Re: [C#] Sets
Hallo Elvis :hi:
Zitat:
Bei meiner .NET 1.1 implementierung hab ich leider sowieso keine Compiler-Prüfung... Muss also alles zur Laufzeit prüfen... :? Zitat:
Zitat:
Grund2: Hab noch kein VS(mein Cousin verspricht mir jede Woche VS 2005 Express(hab leider nur ISDN...), nur kommt immer was dazwischen...) Grund3: bin grad am C# lernen und da wollte ich wenigstens was halbwegs Sinnvolles machen, statt Übungsaufgaben, die nachher sowieso nicht mehr angucke... mfg Christian |
Re: [C#] Sets
Wofür VS? Nimm einfach SharpDevelop...
|
Re: [C#] Sets
Zitat:
mfg Christian |
Re: [C#] Sets
Was hat den VS Express, was SD nicht hat?
|
Re: [C#] Sets
Zitat:
#d ist IMHO die mit Abstand beste IDE, aber nur vom Kern her. Die AddIns und Sprach bindings sind noch lange nicht da wo sie gerade im VS sind. |
Re: [C#] Sets
Zitat:
|
Re: [C#] Sets
mkay, sorry..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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-2025 by Thomas Breitkreuz