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
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.
Vielen Dank,
das sieht ja wirklich simpel aus. Ich habe anscheinend die universalität der Arraylists noch nicht durchdrungen 🙂
bis bald
Christof
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
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
Hallo christof.k,
ja, kannst du.
herbivore