Pensé en usar listas y hacer Exists en una operación que toma O(n)
vez. El uso de Dictionary
en su lugar es O(1)
y se prefiere si la memoria no es un problema.
Si usted no necesita la lista secuencial Me gustaría probar usando un Dictionary
así:
Dictionary<Type, List<Room>> rooms = new Dictionary<Type, List<Room>>;
void Main(){
KitchenRoom kr = new KitchenRoom();
DummyRoom dr = new DummyRoom();
RoomType1 rt1 = new RoomType1();
...
AddRoom(kr);
AddRoom(dr);
AddRoom(rt1);
...
}
void AddRoom(Room r){
Type roomtype = r.GetType();
if(!rooms.ContainsKey(roomtype){ //If the type is new, then add it with an empty list
rooms.Add(roomtype, new List<Room>);
}
//And of course add the room.
rooms[roomtype].Add(r);
}
Es, básicamente, tiene una lista de diferentes tipos de habitación. Pero esta solución solo está bien si no necesita el arraylist. Pero para listas grandes, esta será la más rápida.
Tuve una solución una vez con List<string>
con más de 300,000 elementos. Comparar cada elemento con otra lista de casi el mismo tamaño tomó 12 horas para hacer. Cambió la lógica a usar Diccionario en su lugar y hasta 12 minutos. Para listas más grandes siempre voy al Dictionary<mytype, bool>
donde bool es solo un maniquí que no se usa.
ah mis disculpas postulo en .net 2 desgracia – anonym0use
Con VS2008, esto va a funcionar bien con .NET 2. –
@OJ: con 2,0, solo si usa LINQBridge ... Any es proporcionado por .NET 3.5; podría usar la sintaxis Exists con C# 3.0 lambdas, sin embargo, –