Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 16.07.12 11:24 
ich habe eine ArrayList mit zwei Dimensionen.
die arraylist ist mit "public string[,] users;" definiert
und wird mit "users = new string[zeilen.Count, 3];" initialisiert.

nach dem füllen mit daten versuche ich nun mit folgendem code
das array nach einem namen zu durchsuchen
um mir dann den rest der dazugehörigen daten ab rufen zu können.

ausblenden C#-Quelltext
1:
users.IndexOf(listBoxBenutzer.SelectedItems[0].ToString());					


frage1: warum klappt das so nicht?
frage2: wie könnte es klappen?

gruß,avoid

---nachtrag---
titel wurde geändert.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke


Zuletzt bearbeitet von avoid am Mo 16.07.12 13:05, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 16.07.12 11:40 
Hallo,

was benutzt du denn nun genau: eine ArrayList oder ein mehrdimensionales Array?
Die ArrayList ist aber schon seit .NET 2.0 obsolet (veraltet) und sollte durch eine List<T> ersetzt werden.

Ich verstehe auch nicht, wieso du ein mehrdimensionales Array hier benötigst.
Normalerweise würde man eine Klasse User anlegen und diese dann in eine Liste packen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
class User
{
  public Name { get; set; }
  public Forename { get; set; }
  public DateTime Birthday { get; set; }
}

List<User> users = new List<User>;

// dies dann z.B. in eine Schleife packen
User user = new User { Name = "Smith", Forname = "John", DateTime = new DateTime(196911) };
users.Add(user);
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 16.07.12 13:03 
hm, :roll:
da hab ich wohl die code zeilen durcheinander gebracht.
du hast recht, es geht hier nur um das array mit zwei dimensionen in dem ich einen namen suchen will.
das erklärt auch warum indexof nicht will. :D

mit der arraylist hab ich weiter oben im code nur was eingelesen.
p.s. ich finde die arraylist um ecken praktischer um ein array zu erstellen dessen größe erst am ende bekannt ist,
als erst ein klasse zusammen zu friemeln die ich dann nur ein mal brauche.

ich hab es jetzt so hin bekommen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
for (int i = 0; i <= users.GetUpperBound(0); i++)
{
  if (listBoxBenutzer.SelectedItems[0].ToString() == users[i, 0])
  {
    textBoxName.Text = listBoxBenutzer.SelectedItems[0].ToString();
    textBoxKennwort.Text = users[i, 1];
    numericUpDown1.Value = Convert.ToInt32(users[i, 2]);
  }
}


is wohl etwas billig umgesetzt und geht sicher besser aber es läuft erst mal.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 16.07.12 13:26 
user profile iconavoid hat folgendes geschrieben Zum zitierten Posting springen:
p.s. ich finde die arraylist um ecken praktischer um ein array zu erstellen dessen größe erst am ende bekannt ist,
als erst ein klasse zusammen zu friemeln die ich dann nur ein mal brauche.

List<T> ist im Framework eingebaut, da muss man nichts friemeln ;-) Sie ist außerdem typensicher und IIRC auch schneller als eine ArrayList.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 16.07.12 13:37 
Zudem kannst du auf diese Weise die (undokumentierte) Zuordnung
[,0] ==> Name
[,1] ==> Kennwort
[,2] ==> Ja was eigentlich?

dokumentieren und Fehler besser erkennen.
ausblenden C#-Quelltext
1:
2:
3:
4:
// Sieht eigentlich gut aus
textBoxKennwort.Text = users[i, 2];
// Sieht nach einem Fehler aus
textBoxKennwort.Text = users[i].Name;


Also am besten die Array (fast) vergessen und stattdessen generische Listen hernehmen :wink:
Und so eine kleine Hilfsklasse mit 6 Zeilen kann man sich schon gönnen.

P.S.: Wenn du absolut keine Lust auf Klassen hast, kannst du auch einen struct nehmen.
Der geht genau so gut in die List<T> rein wie eine Klasse, ist aber auf keinen Fall zu empfehlen!
(Aber lieber structs in einer Liste als ein Array :P )

Edit: Die Sache mit den Structs klargestellt.


Zuletzt bearbeitet von jfheins am Mo 16.07.12 13:46, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 16.07.12 13:40 
Zitat:
P.S.: Du kannst auch einen struct nehmen, der geht genau so gut in die List<T> rein wie eine Klasse.


Hier, mit der von TH69 gezeigten Userklasse, sicher keine gute Idee.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 16.07.12 14:22 
ich muß zugeben das ich schon über sowas wie generische Listen gelesen und nachgedacht hatte.
noch hab ich aber davon keinen plan auch wenn ich mit "List" vor einem jahr schon mal was gemacht hab.
da muß ich mich wohl mal etwas einlesen.
um speicherbelegung oder geschwindigkeit gehts mir nicht, warum soll ich sparsamer programmieren als die großen konzerne. ;)

dank euch auf jeden fall.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 16.07.12 18:03 
Och, List ist ganz einfach. ^^

ausblenden C#-Quelltext
1:
2:
List<Datentyp> VariablenName = new List<Datentyp>();
VariablenName.Add(new Datentyp());


Mal so als kleines Beispiel.
Dann gibt es noch die Eigenschaft Count und die Methode Remove um mal die wichtigsten zu nennen.
Die Klasse ist generisch, merk dir das bis dann, wenn du das lernst, denn damit kannst du dann auch die ganzen anderen Dinge verstehen.
Aber so ist das ein ganz einfaches System.
Wenn du mehrere Dimensionen willst, dann setzt du als Datentyp einfach wieder eine Liste.

Und ja, eine Klasse für eine Stelle zu bauen nervt, ist aber tatsächlich später sinnvoller.
Wenn du das nicht willst (auf keinen Fall struct), dann kannst du auch einen anonymen Typ nehmen.
Das macht aber nur Sinn, wenn du das wirklich nur einmal z.B. in einer Methode brauchst. Sieht dann so aus:
ausblenden C#-Quelltext
1:
var Person = new { Name = "Hans", Alter = 5 };					

Du kannst dann später über die Variable Person Name und Alter wie eine normale Eigenschaft abrufen.
Ich persönlich habe es aber noch nie gebraucht^^


In deinem Fall ist eine Klasse aber wirklich sinnvoller, da, wie ich vermute, sich dein ganzes Programm um irgend eine Auflistung von Personen dreht, die dann verarbeitet werden soll. Und es erleichtert die Arbeit damit sehr.