Hey,
mein problem ist es, wie ich den index eines listenelements finden kann. soweit ganz einfach, mein problem ist, dass ich ne liste mit einem selbst definierten datentyp habe:
struct Datatype
{
string id,
string name,
...
}
List<Datatype> blub = new List<Datatype>();
...
// Der liste werden Elemente hinzugefügt
...
// Suche Index
public int GetIndexOfElement(string incomingID)
{
int tmpReturn;
tmpReturn = blub.FindIndex( /* Predicate */);
return tmpReturn;
}
// Sinngemäß die Suche im Predicate:
private bool Predicate(datatype blub, string incomingSession)
{
return String.Equals(blub.id[an der aktuellen stelle], incomingSession);
}
incomingID dabei als Klassenvariable verwenden entfällt!!
Ich steh einfach gerade aufm schlauch wie ich das Predicte realisiere bzw. die Methode deklarieren soll.
für hilfe wäre natürlich dankbar 😉
greets
mex
que? como? no entiendo!!!!!
Hallo,
class Program
{
private static List<int> _liste;
static void Main(string[] args)
{
_liste = new List<int>{1,3,6,8,3,5,2,4,3,7,9,8};
Console.WriteLine(GetIndexOfIrgendwas(3));
Console.ReadKey();
}
static int GetIndexOfIrgendwas(int deinWert)
{
return _liste.FindIndex(val => val > deinWert);
}
}
Wenn ich dich richtig verstehe, sollte das machen was du willst (zumindest das Prinzip).
Gruß David
Hallo The_Mexican,
du kannst für /* Predicate */ einsetzen (ungetestet, aber mindestens im Prinzip richtig):
delegate (Datatype dt) { return dt.id == incomingID; }
herbivore
@ Herbivore
k, ich versuchs danke für den hinweis
@ David,
danke für die antwort leider haben wir uns missverstanden 😦
meine Liste enthält elemente eines selbst definierten datentyps (string id, string name, ...)
string id ist dabei eindeutig (DBverwaltung entfällt übrigens)
in der aufrufenden methode GetIndexOfElement(string incomingID) geht es darum, den Index eines Listenelements zu ermitteln FindIndex(Prdicate)
In der "Predicate-Methode" wird nun aktuellesListenelement.id mit der incomingID verglichen (String.Equals(Listenelement.id, incomingID) und liefert true/ false zurück.
bei true wird in GetIndexOfElement tmpIndex mit dem Index des Elements in der Liste versehen.
hoffe ich habs jetzt besser hinbekommen mein problem zu schildern?!
greets
alex
que? como? no entiendo!!!!!
Hallo The_Mexican,
so hatte ich das schon verstanden und meine Antwort bezieht sich darauf.
Allerdings wäre es, wenn du über die Id schnell auf die Elemente zu greifen willst, eine Überlegung wert, vielleicht besser ein Dictionary <String, Datatype> zu werden, wobei der Key die Id wäre.
herbivore
hey herbivore,
kleine frage zum verständnis
delegate (Datatype dt) { return dt.id == incomingID; }
die delegate dt würde ein abbild der aktuell gefüllten liste enthalten, richtig???
ich blicks noch nicht ganz mit delegaten deswegen frag ich vmtl etwas doof...
greets
mex
que? como? no entiendo!!!!!
Hallo The_Mexican,
nein, bei dem delegate ...
handelt es sich um eine anonyme Methode, die von FindexIndex für jedes Listenelement aufgerufen wird, bis die anonyme Methode erstmalig true zurückgibt oder das Ende der Liste erreicht ist.
herbivore
Hallo The_Mexican,
aber genau das kannst du doch mit meiner Lösung so machen 😃 Verstehe das Problem nicht so ganz.
class Program
{
private static List<Datatype> _liste;
struct Datatype
{
public int id;
public string name;
}
static void Main(string[] args)
{
_liste = new List<Datatype>()
{
new Datatype{id=1,name="David"},
new Datatype{id=2, name = "Julia"}
};
int index = GetIndexOfId(1);
Console.WriteLine("Person mit id {0} befindet sich an index {1}",1,index);
Console.ReadKey();
}
static int GetIndexOfId(int id)
{
return _liste.FindIndex(val => val.id == id);
}
}
Gruß David
Hallo The_Mexican
Siehe auch [Artikel] Delegaten, anonyme Methoden, Lambda-Ausdrücke & Co.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
hallo david,
jetzt versteh ich dein bsp. wenn ichs richtig verstanden habe s.h. post von JAck30lena dann ist das nur mit .net 3.x möglich ich arbeite mit .net 2.0
greets
mex
que? como? no entiendo!!!!!
Hallo,
dann musst du das Beispiel ein wenig nach Herbivores Vorschlag umbauen 😉
static int GetIndexOfId(int id)
{
return _liste.FindIndex(delegate(Datatype dt) { return dt.id == id; });
}
Gruß David
Affengeil!!
Funktioniert!
danke an alle - hab das mit den deleagten zwar noch nicht komplett verinnerlicht aber das werd ich jetzt tun.
wie gesagt, danke für die hilfe...
greets
mex
que? como? no entiendo!!!!!
Nein Lambdas gehen auch mit .NET 2.0 solange du C# 3.0 verwendest.
Hallo Zebes,
Nein Lambdas gehen auch mit .NET 2.0 solange du C# 3.0 verwendest.
tut The_Mexican aber wohl nicht:
Entwicklungsumgebung: vs2005
herbivore
Ok. wollte nur klarstellen, dass es nicht von der .NET Version, sondern von der C# Version abhängig ist. Zumidnest ab .NET2.0
mfg
Zebes