Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# dynamische Arrays? (https://www.delphipraxis.net/57755-dynamische-arrays.html)

faux 25. Nov 2005 21:50


dynamische Arrays?
 
Hallo!

Gibts in C# eigentlich dynamische Arrays? Soweit ich mich erinnere nämlich nicht.
Wie löst man sonst das Problem, dass man in einer Schleife jedes mal einen Wert hinzufügt?

Grüße
Faux

malo 25. Nov 2005 22:02

Re: dynamische Arrays?
 
Geht sowas nicht?
Code:
int[] a = new int[];
Das klappt auf jeden Fall, wenn man die Werte vorinitalisiert (Beispielcode in meiner Sprachreferenz). Dieser Version hab ich jedoch exakt so nicht ausprobiert. sollte aber funktionieren, oder?

faux 25. Nov 2005 22:08

Re: dynamische Arrays?
 
Kannst mir mal ein Beispiel geben, wie ich den Array anspreche?
Im Prinzip will ich sowas machen (nur halt in C# :mrgreen:):
Delphi-Quellcode:
var
  werte: array of integer;
  i: integer;
begin
  for i := 0 to x do
  begin
    SetLength(werte, Length(werte)+1);
    werte[i] = 2^i;
  end;
end;
Also ich hab eine Schleife, deren ende ich noch nicht weiß, und berechne jeden Durchlauf einen Wert.

Grüße
Faux

Elvis 25. Nov 2005 22:10

Re: dynamische Arrays?
 
Zitat:

Zitat von malo
Geht sowas nicht?
Code:
int[] a = new int[];

Nope geht nicht.
.Net kennt keine dyn. Arrays. Jede Instanz eines Array ist per Definition fixed size.
Zitat:

Zitat von faux
Wie löst man sonst das Problem, dass man in einer Schleife jedes mal einen Wert hinzufügt?

Garantiert nicht mit einem Array. :mrgreen:

Schaue dir mal S.C.G.List<> oder S.C.G.LinkedList<> an.
Nachtrag:
Zitat:

Delphi-Quellcode:
for i := 0 to x do
begin
  SetLength(werte, Length(werte)+1);

Oh ja, am besten 5.000 mal, sind ja nur 5.000 Kopieroperationen eines ständig wachsenden Bereiches, welche die Speicherfragmentierung ja nur vertausendfachen... (bzw. die GC extrem oft dazu zwingen Speicher zu relokalisieren um die Fragmentierung aufzulösen...)

btw: Hi Oxmyx :hi: , schaue mal auf Sprache und Plattform. ;)

Oxmyx 25. Nov 2005 22:13

Re: dynamische Arrays?
 
Du kannst dir doch einfach einen Speicherbereich reservieren, und dann mit nem normalen typisierten Zeiger darin rummachen.

faux 25. Nov 2005 22:17

Re: dynamische Arrays?
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von malo
Geht sowas nicht?
Code:
int[] a = new int[];

Nope geht nicht.
.Net kennt keine dyn. Arrays. Jede Instanz eines Array ist per Definition fixed size.

Also hat mein Erinnerungsvermögen nicht versagt... :D
(Würde ja auch gegen das Prinzip von .NET verstoßen, wenn es dyn. Arrays gäbe).

Zitat:

Zitat von Elvis
Zitat:

Zitat von faux
Wie löst man sonst das Problem, dass man in einer Schleife jedes mal einen Wert hinzufügt?

Garantiert nicht mit einem Array. :mrgreen:

Schaue dir mal S.C.G.List<> oder S.C.G.LinkedList<> an.

OK, Danke. Das hab ich gesucht. :D
(Hab immer in System.Windows.Forms gesucht. => BLACKOUT. :mrgreen:)

Grüße
Faux

NACHTRAG:
Zitat:

Zitat von Oxmyx
Du kannst dir doch einfach einen Speicherbereich reservieren, und dann mit nem normalen typisierten Zeiger darin rummachen.

:shock:

Oxmyx 25. Nov 2005 22:22

Re: dynamische Arrays?
 
Naja, du könntest theoretisch ja realloc verwenden. So wie du das vorhast, ist aber eine Liste die wahrlich bessere Lösung. ;)

malo 25. Nov 2005 22:24

Re: dynamische Arrays?
 
Zitat:

Zitat von faux
Würde ja auch gegen das Prinzip von .NET verstoßen, wenn es dyn. Arrays gäbe.

Und wieso akzeptiert Delphi.NET dann dynamische Arrays? Trickst das da noch irgendwie? :gruebel:
Btw, wie ist die .NET-SetLength-Funktion für D.NET? :mrgreen:

faux 25. Nov 2005 22:25

Re: dynamische Arrays?
 
System.Collections.ArrayList:
Implements the IList interface using an array whose size is dynamically increased as required.

Zitat:

Zitat von Oxmyx
Naja, du könntest theoretisch ja realloc verwenden. So wie du das vorhast, ist aber eine Liste die wahrlich bessere Lösung. ;)

Es geht um ein .NET Thema. ;)

Oxmyx 25. Nov 2005 22:27

Re: dynamische Arrays?
 
Zitat:

Zitat von faux
Es geht um ein .NET Thema. ;)

Ups. ;)

faux 25. Nov 2005 22:33

Re: dynamische Arrays?
 
Ähm, sorry jetzt die peinliche Frage :oops:...

Wie nennt man denn das Feature dass mir erlaubt,
Code:
System.Collections.Generic.List<string>
anzuwenden?
Also ich spreche jetzt vom <string>. Ich denke mal, dass es klar ist was es machst, jedoch wie nennt man dieses Sprachkonstrukt?

Khabarakh 25. Nov 2005 22:35

Re: dynamische Arrays?
 
Zitat:

Zitat von faux
Kannst mir mal ein Beispiel geben, wie ich den Array anspreche?
Im Prinzip will ich sowas machen (nur halt in C# :mrgreen:):
Delphi-Quellcode:
var
  werte: array of integer;
  i: integer;
begin
  for i := 0 to x do
  begin
    SetLength(werte, Length(werte)+1);
    werte[i] = 2^i;
  end;
end;
Also ich hab eine Schleife, deren ende ich noch nicht weiß, und berechne jeden Durchlauf einen Wert.

Grüße
Faux

Das geht auch unter .NET mit Arrays, wenn man etwas geschickter codet :wink: :
Code:
int count = int.Parse(Console.ReadLine());

int[] intArray = new int[count];
for (int i = 0; i < intArray.Length; i++) {
   intArray[i] = 1 << i;
}

faux 25. Nov 2005 22:40

Re: dynamische Arrays?
 
Hallo Khabarakh!
Ja, das ist mir klar. So hätte ich es auch gemacht, wenn es möglich wäre. ;)
Mein Fehler. Ich habe das Beispiel ungünstig gewählt.
Es handelt sich um eine while-Schleife, deren Ende jeden durchlauf neu berechnet wird.
Hab ich hier angedeutet:
Zitat:

Also ich hab eine Schleife, deren ende ich noch nicht weiß, und berechne jeden Durchlauf einen Wert.
Jaja, zwischen möglich und möglich liegen Welten, aber ich finde der Aufwand lohnt sich nicht, den Endwert im Vorhinein zu berechnen.

Ich habs jetzt übrigens mit List, mit LinkedList und mit der ArrayList geschafft. :P
Danke nochmal.

Mich würde trotzdem noch das mit dem < und > interessieren. ;)

Grüße
Faux

Elvis 25. Nov 2005 22:49

Re: dynamische Arrays?
 
Zitat:

Zitat von faux
Mich würde trotzdem noch das mit dem < und > interessieren. ;)

Das sind Generics! :firejump:
Wie kann man 2.0 benutzen und das nicht kennen? :shock:

faux 25. Nov 2005 23:00

Re: dynamische Arrays?
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von faux
Mich würde trotzdem noch das mit dem < und > interessieren. ;)

Das sind Generics! :firejump:
Wie kann man 2.0 benutzen und das nicht kennen? :shock:

Ich sagte ja, ich kenns, nur wusste ich nicht, wie das heißt...
Danke.

Grüße
Faux

Der_Unwissende 25. Nov 2005 23:01

Re: dynamische Arrays?
 
Zitat:

Zitat von faux
Hallo Khabarakh!
Ja, das ist mir klar. So hätte ich es auch gemacht, wenn es möglich wäre. ;)

Äh, das Beispiel von Khabrakh ist durchaus möglich, aber damit du die alten Werte behalten kannst müsstest du die Zwischenspeichern und dann kopieren (und danach dürfte die GC den Speicher des alten Arrays aufräumen). Also es klappt und du landest bei dem was jmd. hier am Anfang schrieb.

faux 25. Nov 2005 23:04

Re: dynamische Arrays?
 
Zitat:

Zitat von Der_Unwissende
Zitat:

Zitat von faux
Hallo Khabarakh!
Ja, das ist mir klar. So hätte ich es auch gemacht, wenn es möglich wäre. ;)

Äh, das Beispiel von Khabrakh ist durchaus möglich, aber damit du die alten Werte behalten kannst müsstest du die Zwischenspeichern und dann kopieren (und danach dürfte die GC den Speicher des alten Arrays aufräumen). Also es klappt und du landest bei dem was jmd. hier am Anfang schrieb.

Ich sagte schon:
Zitat:

Zitat von faux
Jaja, zwischen möglich und möglich liegen Welten, aber ich finde der Aufwand lohnt sich nicht, den Endwert im Vorhinein zu berechnen.

Ich denke, ich hab das jetzt relativ kurz und zweckerfüllt mit nur 2 Zeilen Code gelöst. :P

Grüße
Faux

jim_raynor 25. Nov 2005 23:05

Re: dynamische Arrays?
 
Zitat:

Zitat von faux
Zitat:

Zitat von Elvis
Zitat:

Zitat von faux
Mich würde trotzdem noch das mit dem < und > interessieren. ;)

Das sind Generics! :firejump:
Wie kann man 2.0 benutzen und das nicht kennen? :shock:

Ich sagte ja, ich kenns, nur wusste ich nicht, wie das heißt...
Danke.

Grüße
Faux

Nennt man Generics oder damals in C++ hieß es Templates. Wurde aber erst mit NET 2.0 eingeführt.

faux 25. Nov 2005 23:07

Re: dynamische Arrays?
 
Zitat:

Zitat von jim_raynor
Nennt man Generics oder damals in C++ hieß es Templates. Wurde aber erst mit NET 2.0 eingeführt.

Danke, danke.. ;)

Bevor jetzt noch jemand zu klären beginnt, was man damit machen kann, etc.
Ich weiß was das ist, wofür man es braucht, habs selbst schon benutzt (in eigenen Klassen) und und und. Mir gings lediglich um den Namen.

Danke, trotzde, für die Hilfe.

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz