Ich habe eine C# Dictionary<DateTime,SomeObject>
Instanz.Der effizienteste Weg, um alle Elemente eines Dictionary aus einer Liste von Schlüsseln abzurufen?
Ich habe den folgenden Code:
private Dictionary<DateTime, SomeObject> _containedObjects = ...;//Let's imagine you have ~4000 items in it
public IEnumerable<SomeObject> GetItemsList(HashSet<DateTime> requiredTimestamps){
//How to return the list of SomeObject contained in _containedObjects
//Knowing that rarely(~<5% of the call), one or several DateTime of "requiredTimestamps" may not be in _containedObjects
}
Ich bin auf der Suche, wie ein IEnumerable<SomeObject>
zurückzukehren alle Elemente enthalten, die durch einen der mitgelieferten Schlüssel verwiesen wurde. Das einzige Problem ist, dass diese Methode sehr oft aufgerufen wird und wir nicht immer alle Parameter haben.
So gibt es etwas effizienter als dies:
private Dictionary<DateTime, SomeObject> _containedObjects = ...;//Let's imagine you have ~4000 items in it
public IEnumerable<SomeObject> GetItemsList(HashSet<DateTime> requiredTimestamps){
List<SomeObject> toReturn = new List<SomeObject>();
foreach(DateTime dateTime in requiredTimestamps){
SomeObject found;
if(_containedObjects.TryGetValue(dateTime, out found)){
toReturn.Add(found);
}
}
return toReturn;
}
Benötigen Sie immer alle Ergebnisse in der zurückgegebenen 'IEnumerable'? Andernfalls könnten Sie ein Yield-Konstrukt verwenden, um die Ergebnisse bei Bedarf lazy zu berechnen. Das würde etwas von der Last abtragen. –