Laden...

Multidimensionale ArrayList

Erstellt von christof.k vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.581 Views
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren
Multidimensionale ArrayList

Hallo zusammen,

ich möchte gerne eine zweidimensionale Arraylist erstellen. Ich möchte für c-sourcefiles die abhängingen header-files speichern.
Also eine Arraylist mit dem c-sourcefile als string in einer Ebene und den headerfiles in der anderen.
Leider kriege ich es nicht hin, dieses zu deklarieren und weiss im Moment auch nicht, wie ich dann darauf zugreifen kann. Bin doch noch zu sehr C++-geprägt.

Kann mir jemand dabei weiterhelfen (ich nehme auch jede andere Lösung).
Ich könnte mir auch vorstellen, ein XML-dokument zu nehmen. Dort könnte ein Tag ja der string für's c-file sein und dann ganz viele untertags für die headers. Leider weiss ich da auch nicht, wie ich es deklariere.

Mit der Hoffnung auf viele Antworten
Vielen Dank
Christof

X
2.051 Beiträge seit 2004
vor 18 Jahren

ich würde eine Struktur machen die c-namen enthält und liste mit headers:

struct CFile
{
  public string CName;
  public ArrayList Headers;
}

diese speicherts du dann in eineranderen ArrayList:

ArrayList CFiles = new ArrayList;
...

CFile cfile = new CFile();
cfile.CName = "main.c";
cfile.Headers = new ArrayList();
cfile.Headers.Add("conio.h");
cfile.Headers.Add("dir.h");
...

CFiles.Add(cfile);

oder nimm eine Hashtable. als Key nimmst du dann den Namen der c-Datei und als Value speicherst du eine ArrayList mit headers.

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren

Vielen Dank,

das sieht ja wirklich simpel aus. Ich habe anscheinend die universalität der Arraylists noch nicht durchdrungen 🙂

bis bald
Christof

1.373 Beiträge seit 2004
vor 18 Jahren

Als Alternative Datenstruktur bietet sich hier eine Hashtable/Dictionary an:


// .NET 2
Dictionary<string, List<string>> files = new Dictionary<string, List<string>>();
//hinzufügen
files["foo.cpp"] = new List<string>(new string[]{"foo.h", "stdafx.h"});
files["bar.cpp"] = new List<string>(new string[]{"bar.h", "stdafx.h", "foo.h"});
// welche header braucht foo.cpp?
List<string> headers = files["foo.cpp"];


// .NET 1.1
Hashtable filesOld = new Hashtable();
// hinzufügen
filesOld["foo.cpp"] = new ArrayList(new string[]{"foo.h", "stdafx.h"});
filesOld["bar.cpp"] = new ArrayList(new string[]{"bar.h", "stdafx.h", "foo.h"});		
// welche header braucht foo.cpp?
ArrayList headersOld = filesOld["foo.cpp"] as ArrayList;

Du brauchst dein keine Hilfsstruktur und kannst ziemlich einfach die Header einer Datei aufrufen.

MfG VizOne

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren

Hallo!

Die Idee mit dem Hashtable sieht ja schick aus. Nun stellt sich mir die Frage, wie ich während der Laufzeit eine Headerfiles dem C-file zuordne?
Du hast mit

filesOld["foo.cpp"] = new ArrayList(new string[]{"foo.h", "stdafx.h"});

ja die h-files schon per string eingefügt.
Ich gehe davon aus, dass ich "foo.cpp" auch durch eine string-variable ersetzen kann, oder?

Vielen Dank nochmal
Christof

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo christof.k,

ja, kannst du.

herbivore