Laden...

Array, erstes Element frei lassen?

Erstellt von mirus vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.743 Views
M
mirus Themenstarter:in
21 Beiträge seit 2011
vor 13 Jahren
Array, erstes Element frei lassen?

Hallo,

sollte man in einem Array den ersten Wert mit dem Index = 0 auslassen, erleichtert das den Umgang mit Arrays?Wie wird das im Professionellen Umfeld geregelt? Wenn man sich an eine
"Schreibweise" gewöhnt ist es natürlich umständlich sich wieder die andere "anzueignen".

Beispiel:


string[] array = new string[5];
array[0] = String.Empty;

for (int i = 1; i < array.length; i++)
{
       Console.WriteLine(i);
}

Hier wird die Iteration bei 1 begonnen, nicht bei 0.

Gruß
mirus

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo mirus,

willkommen bei myCSharp.de

Also das erste Element im Array wird so gut wie nie frei gelassen.
Das macht auch wenig Sinn

Denn 0 basierte Arrays sind sowas wie ein Standard.
Deshalb ist das jeder Programmierer gewohnt und denkt gleich schon richtig.

Wenn du 0 freilässt dann hast du unter anderem das Problem dass Length (die Länge vom Array) nicht mehr stimmt.
Die Befehle wie Sum / Avg usw. funktionieren nicht mehr wie gewünscht usw.

Also ich kann dir nur empfehlen die Position 0 nicht auszulassen.

Gruß
Michael

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

Denn 0 basierte Arrays sind sowas wie ein Standard.

Sie sind nicht nur sowas wie, sondern sie sind eindeutig standard und immer 0 basiert in C# und .Net. Das ist so spezifiziert. Über sowas brauch man eigentlich gar nicht diskutieren 😃

Baka wa shinanakya naoranai.

Mein XING Profil.

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo talla,

Sie sind nicht nur sowas wie, sondern sie sind eindeutig standard und immer 0 basiert in C# und .Net

Naja das sowas wie war nicht so optimal gewählt von mir 😃

Ich wollte damit nur sagen dass es in der weiten Programmier-sprachen Welt meistens die 0 basierten Arrays gibt.

Aber bei manchen exotischen Programmiersprachen (z.B. Smalltalk) sind die 1 basiert

Über sowas brauch man eigentlich gar nicht diskutieren 😃

Wirklich viel kann man da auch nicht diskutieren 😉

Greetz

M
mirus Themenstarter:in
21 Beiträge seit 2011
vor 13 Jahren

Die Moderation scheint sich ja einig zu sein..:)
Danke für die schnellen Antworten!
Dann werde ich wohl bei der alten Variante bleiben, also mit dem Index = 0 arbeiten.
Bin nur ins grübeln gekommen, weil unser Prof das in der letzten Vorlesung als Tipp mitgegeben hatte, aber das war dann sicherlich an die "ich programmiere eigentlich nicht so häufig Studenten"
gerichtet..:)

Gruß
mirus

156 Beiträge seit 2010
vor 13 Jahren

Bin nur ins grübeln gekommen, weil unser Prof das in der letzten Vorlesung als Tipp mitgegeben hatte, aber das war dann sicherlich an die "ich programmiere eigentlich nicht so häufig Studenten" gerichtet..🙂

🤔 ... ich will nur hoffen das Du Dich verhört oder etwas falsch verstanden hast

wenn Du wirklich den Start des Index bei 1 benötigst, dann den Umweg


for(int index = 1; index <= array.length; index++)
{
    array[index-1] = 42;
}

👍

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo zusammen,

das erste Element frei zu lassen, ist - wie schon festgestellt - vollkommener Quatsch. Und ich kann mir auch nicht vorstellen, dass ein Professor, der sich mit dem Thema auskennt eine solche Empfehlung gibt.

Allerdings gibt es in .NET die Möglichkeit zu bestimmen, mit welchem Index ein Array beginnen soll. Ich denke, das ist eingebaut, weil .NET ja die Basis für beliebige Programmiersprachen ist und es gibt sowohl Programmiersprachen, bei denen der Index fest bei 0 beginnt, welche wo er fest bei 1 beginnt und welche bei denen man den Startindex beliebig festlegen kann. Die Array-Klasse von .NET unterstützt das alles.

Möglicherweise bezog sich der "Tipp" des Professors darauf. Auch das ist allerdings eine schlechte Idee.

Denn Array keine Klasse wie andere, sondern Arrays sind stark in die Sprache C# integriert. Das fängt schon damit an, dass es eine spezielle Syntax gibt, um Arrays zu deklarieren (und zu initialisieren). Und wenn man diese Integration von Arrays in C# benutzt, beginnen Arrays automatisch immer mit 0 und es ist nicht möglich das zu ändern. .NET-Arrays mit anderem Startindex als 0 in C# zu benutzen, erfordert ziemliche Verrenkungen. Deshalb sollte man nicht nur in C#, sondern am besten in jeder Sprache (in der das möglich ist) Arrays, die bei 0 beginnen verwenden, damit man keine Probleme bekommt, wenn man Projekte schreibt, die mehrere Sprachen nutzen.

Also noch mal ganz klar: Arrays sollten immer bei 0 beginnen (und tun das in C# auch automatisch) und das erstes (nullte) Element sollte immer ganz normal genutzt werden.

herbivore

PS: An sich fällt fast alles unter "Grundlagen, sollte man wissen" und - wie schon angesprochen - unter "braucht man nicht zu diskutieren, ist so". Trotzdem lasse ich den Thread mal offen, weil das Thema, dass in .NET nicht 0 basierte Arrays möglich sind, die Sprachintegration von Arrays in C# aber nur 0 basierte Arrays erlaubt, vielleicht doch nicht so klar und bekannt ist, wie man sich das wünschen würde.

C
2.121 Beiträge seit 2010
vor 13 Jahren

Bin nur ins grübeln gekommen, weil unser Prof das in der letzten Vorlesung als Tipp mitgegeben hatte

War das am 1. April?
Ich würd mal nachfragen warum jemand so schwachsinnige Tips gibt.

aber das war dann sicherlich an die "ich programmiere eigentlich nicht so häufig Studenten" gerichtet..:)

Klingt wie wenn ein Fahrlehrer sagt, vergiss Stopschilder, du fährst ja eh nur sehr wenig.
Den Vergleich kannst du ja mal deinem Prof sagen.

1.361 Beiträge seit 2007
vor 13 Jahren

Hallo,

ich kenne solche 0/1-Offset Überlegungen allerdings. Ich kann mich noch an ein C++-Buch Erinnern, in dem verschiedene Datenstrukturen für Matrizen diskutiert wurden. (deren Reihen und Spalten Mathematiker intuitiv ab 1 anfangen zu zählen)

Und dort gab es auch den "Trick" eine Union aus einem Array und einem "length"-feld zu machen, das gerade die Abmessungen des 0ten Array-Elementes hat.
So konnte man "intuitiv" und "effizient" mit einem 1-basierten Zugriff arbeiten und hat keinen Platz verschwendet.
Das Argument, dass Sum,Avg usw nicht korrekt funktionieren stimmt da ja nicht, da c-arrays ja auch nur pointer sind und man somit einfach durch pointerarithmetik diesen funktionen das "Array ab dem 1. Element" übergeben kann.

Naja, alles hacky und tricky. Dennoch gab und gibt es solche Überlegungen.

Aber auch mein Rat an mirus: Gewöhn dich an die 0-basierte Indexierung und vergiss alles andere. Code sollte in erster Linie klar und verständlich sein statt clever und trickreich. Und die Informatik "denkt" größtenteils 0-basiert.

beste Grüße
zommi