// OBVIAMENTE esta no es la mejor opción. Un diccionario de <Area, AreaStatus> para las áreas bastaría para hacerlo más simple, pero :) private void UpdateWithJSONData() { // Primero añado las que están en la nube y no localmente foreach (Area area in allAreas) // Recorro las áreas cogidas { if (!gameData.areasStatus.ContainsKey(area.name)) { gameData.AddArea(area); // Si no la tiene, la añado } } // Guardo los nombres de las que están localmente y no están en la nube List <string> areasToRemove = new List <string>(); foreach (KeyValuePair <string, AreaStatus> localArea in gameData.areasStatus) { bool isOnDatabase = false; foreach (Area area in allAreas) // Para cada local, miro si está en el json { if (area.name == localArea.Key) { isOnDatabase = true; break; } } if (!isOnDatabase) { areasToRemove.Add(localArea.Key); // Si se han recorrido todas las de la nube y no está, debe eliminarse. } } // Recorro cada una de las áreas a eliminar y las quito for (int i = 0; i < areasToRemove.Count; i++) { gameData.RemoveArea(areasToRemove[i]); } }