| 

.NET C# Java Javascript Exception

2
Ich habe ein Object, dass aber eigentlich eine Liste ist, die enthält wiederum ein Dictionary mit nur einem Eintrag.

List<Dictionary<string,bool>>

Nun wollte ich das schön Elegant mit Linq machen, bis mir aufgefallen ist, dass ja in jedem Dictionary nur ein Element drin ist.

Ich möchte wissen wann der Bool Wert gleich true ist und dann mir den Key dazu merken gilt.
Hat dafür jemand eine schöne Lösung?
News:
24.08.2009
Serda 455 2 7
2 Antworten
2
Wenn jedes deiner Dictionaries nur je einen Eintrag beinhaltet, dann würde ich es anders lösen:
List<MyStruct> structList = new List<MyStruct>();
for (int i = 0; i < 5; i++) {
MyStruct myStruct = new MyStruct();
myStruct.Key = string.Format("Test_{0}", i);
myStruct.Value = i % 2 == 0;
structList.Add(myStruct);
}
var elements = structList.FindAll(x => x.Value == true);

Ich würde hierfür dann eine Structure verwenden.

public struct MyStruct {
public string Key { get; set; }
public bool Value { get; set; }

}


Die Abfrage über Linq fällt dann um ein vielfaches einfacher aus:
var elements = structList.FindAll(x => x.Value == true);
25.08.2009
Rene Drescher-Hackel 1,1k 1 8
Hat mir sehr geholfen! Ich danke Dir ;)
Serda 25.08.2009
Wieso kann man das FindAll nicht direkt auf ein Dictionary anwenden?
Serda 25.08.2009
1
man kann alles ;-)
Dictionary<string, bool> dic = new Dictionary<string, bool>();
for (int i = 0; i < 5; i++) {
dic.Add(string.Format("Test_{0}", i), i % 2 == 0);
}
var elements = dic.ToList().FindAll(x => x.Value.Equals(true));

Du musst dein Dictionary nur zur Liste machen ;-)
Rene Drescher-Hackel 25.08.2009
hehe, danke again
Serda 25.08.2009
2
Auf die Gefahr die Frage nicht wie erwartet zu beantworten, ich finde den Ansatz die Dictionaries mit jeweils einem Element in eine Liste zu verpacken nicht besonders sinnvoll. Mit einem Dictionary könnte das wie folgt aussehen.

Dictionary<string, bool> collection = new Dictionary<string, bool>();
collection.Add("A", true);
collection.Add("B", false);

var keys = from dict in collection
where dict.Value
select dict.Key;

foreach (var item in keys)
Console.WriteLine(item);
25.08.2009
me 1,1k 2 9
me 1,1k 2 9
Leider kann ich die Struktur nicht ändern, trotzdem hat mir deine Antwort geholfen. Danke
Serda 25.08.2009
Ich finde diese Schreibweise schöner:
var keys = dict.Where(d => d.Value).Select(d => d.Key); Aber das ist je trotzdem das Gleiche
Serda 25.08.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH