myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Arrays initialisieren ohne zu wissen wie viele var darin gespeichert werden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

geschlossen (weitere Infos)
Zum Ende der Seite springen  

Arrays initialisieren ohne zu wissen wie viele var darin gespeichert werden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
BummzuaBua BummzuaBua ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.03.2019
Beiträge: 3
Entwicklungsumgebung: Visual Studio 2017
Herkunft: AUT


BummzuaBua ist offline

Arrays initialisieren ohne zu wissen wie viele var darin gespeichert werden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Haiho

Kurz und pregnant, ich versuche eine Reihe von vordefinierten Zahlen in einem Array,

C#-Code:
int[] arZahlen = new int[] {44, 33, 22, 11, 13, 15, 99, 2012, 456, 77, 86, 54, 31, 48 };

in 2 seperaten Arrays abzuspeichern.
Der eine enthält gerade, der andere ungerade zahlen.

C#-Code:
int[] arGerade = new int[14];
int[] arUngerade = new int[14];
int gerade = 2;
bool teilbar = false;

for (int i = 0; i < arZahlen.Length-1; i++)
                        {
                                teilbar = (0 == (arZahlen[i] % gerade)); //bool =teilbar durch 2 Ja oder Nein
                                if (teilbar == true)
                                {
                                        arGerade[i] = arZahlen[i];

                                }
                                else arUngerade[i] = arZahlen[i];
                        }

Hab meinen anfängerKopf schon zerbrochen aber komme nicht dahinter wie ich es löse.

arGerade gibt mir: 44,0,22,0,0,0,0,2012,456,0,86,54,0,0 aus.

Wie kann ich dem Array sagen das ich nicht weiß wie viele var darin letztendlich zu speichern sind?
Und wie kann ich mein Gerumpel etwas Fachmännischer angehen.
Da ich noch in Kinderschuhen herumlaufe, bitte halbwegs leicht verständlich ausdrücken. :)

Freundliche Grüße
Bummi
11.03.2019 20:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.365
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Benutze statt einem Array (mit fester Anzahl) eine dynamische  List<T>, so daß du per list.Add(x) beliebig viele Einträge hinzufügen kannst (ohne die Gesamtanzahl im voraus wissen zu müssen).
11.03.2019 20:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BummzuaBua BummzuaBua ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.03.2019
Beiträge: 3
Entwicklungsumgebung: Visual Studio 2017
Herkunft: AUT

Themenstarter Thema begonnen von BummzuaBua

BummzuaBua ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
Benutze statt einem Array (mit fester Anzahl) eine dynamische  List<T>, so daß du per list.Add(x) beliebig viele Einträge hinzufügen kannst (ohne die Gesamtanzahl im voraus wissen zu müssen).

Danke vielmals.
Zwar auch mit etwas Kopfzerbrechen, aber es hat einwandfrei funktioniert.

Hätte man das auch irgendwie mit einem Array lösen können, oder ist es generell nur mit List möglich?
11.03.2019 20:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007 Palladin007 ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 1.200
Entwicklungsumgebung: Visual Studio 2017
Herkunft: NRW


Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die List nutzt intern auch nur ein Array.
Also ja, geht auch ohne List, allerdings baust Du dann das Gleiche wie die List nach und das wahrscheinlich nicht Mal halb so gut, wie die List in .NET

Oder Du nutzt IEnumerable bzw. das  yield-Schlüsselwort, aber das funktioniert völlig anders und ist wahrscheinlich nicht unbedingt das Beste für einen Anfänger.
11.03.2019 21:08 Beiträge des Benutzers | zu Buddylist hinzufügen
BummzuaBua BummzuaBua ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.03.2019
Beiträge: 3
Entwicklungsumgebung: Visual Studio 2017
Herkunft: AUT

Themenstarter Thema begonnen von BummzuaBua

BummzuaBua ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Palladin007:
Oder Du nutzt IEnumerable bzw. das  yield-Schlüsselwort, aber das funktioniert völlig anders und ist wahrscheinlich nicht unbedingt das Beste für einen Anfänger.

Dann bedanke ich mich ebenfalls recht herzlich für die Antwort.
Werd mich auch da mal ein bisschen reinlesen und versuchen aufzusaugen was ich aufsaugen kann.
thanks :)
11.03.2019 21:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007 Palladin007 ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 1.200
Entwicklungsumgebung: Visual Studio 2017
Herkunft: NRW


Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ah - ich seh gerade, dein Vorhaben ist per yield nicht so einfach möglich, zumindest nicht exakt so.

Beispiel:

C#-Code:
public IEnumerable<int> GetNumbers()
{
    for (var i = 0; i < 10; i++)
        yield return i;
}

public void UseNumbers()
{
    foreach (var number in GetNumbers())
        Console.WriteLine(number);
}

Das geht, zwei Listen zurück geben geht aber nicht.
Du bräuchtest dann ein anderes Verfahren.


Das Wichtigste ist die Liste, die brauchst Du immer und immer wieder.
11.03.2019 21:22 Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.972
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Herangehensweise per yield verführt dazu, wenn man mehrere Ergebnislisten haben will, pro Ergebnisliste die Quell-Collection einmal zu durchlaufen, und sich damit die schönere Syntax mit schlechterer Performance zu erkaufen. (Ich meine: wenn man von dem Punkt, den Palladin007 gepostet hast, weiter macht bis zu einem Punkt, wo man n Ergebnislisten hat).

Von daher: bleib bei den Listen, dein geposteter Quellcode war völlig in Ordnung, wenn auch mit dem falschen Collection-Typ (Array).

LaTino
12.03.2019 07:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.594
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BummzuaBua,

BTW  [Tipp] Anfängerhinweis == true / == false, somit reicht

C#-Code:
if (teilbar)

mfG Gü
20.03.2019 14:54 Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 193
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und noch ein kleiner Randhinweis von wg. dynamischer Arraygrösse: die ganz alte Methode ging über ArrayList, eine neuere Option ab .NET 3.5 ist die Array.Resize()-Methode.
Siehe auch  SO - how-to-extend-arrays-in-c-sharp und  DotnetPerls - ArrayResize
21.03.2019 14:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.329
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@M.L.
Das liegst du etwas falsch.
Aber ab .NET 2.0 gab es schon die List<T> die, wie Th69 schon schrieb, intern mit einem Array arbeitet und dieses dann auch bei erreichen der Array Kapazität mit Array.Resize erweitert.
Ist also nciht erst seit .NET 3.5 möglich mit Array.Resize direkt oder durch List<T> indirekt zu arbeiten.

Array.Resize muss man i.d.R. eigentlich nicht verwenden.
Die meistens kann man direkt mit List<T> als Container arbeiten und muss sich um solche grundsätzlichen Themen keine Gedanken machen.

T-Virus
22.03.2019 13:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.972
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das ist falsch.

List<T> benutzt an keiner Stelle Array.Resize. Die Quellen sind offen, es schadet nicht, sie zu prüfen, bevor man eine Behauptung aufstellt.

Zitat von MSDN:
As elements are added to a List, the capacity of the List is automatically increased as required by reallocating the internal array.

(Hervorhebung von mir)

LaTino

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am 25.03.2019 07:56.

25.03.2019 07:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.329
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@LaTino
Stimmt hatte ich mit Array.Copy verwechselt.

T-Virus
25.03.2019 08:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.199
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Leute, diese Diskussion führt doch zu nichts. Ob man das jetzt Resizing oder Reallocation nennt, es läuft doch auf das Gleiche raus. Und es hilft niemandem weiter, wie sind hier im Grundlagenforum! Also bitte nehmt euch mal zusammen, und laßt nicht jede einfache Frage zu einem Endlosthema ausarten!
25.03.2019 10:46 Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.972
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@MrSparkle, ah, okay. Mir war entgangen, dass im Grundlagenforum keine Grundlagen mehr diskutiert werden sollen. Entschuldigung.

LaTino
25.03.2019 11:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Monate.
Der letzte Beitrag ist älter als 6 Monate.
geschlossen (weitere Infos)


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.10.2019 14:46