Отображения (map): Напишите программу 2

Messages
1,608
Reaction score
288
Website
tehadm.ru
В ходе анализа результатов переписи населения информация была сохранена в объекте типа map:

C-like:
groupCity := map[int][]string{
    10:   []string{...}, // города с населением 10-99 тыс. человек
    100:  []string{...}, // города с населением 100-999 тыс. человек
    1000: []string{...}, // города с населением 1000 тыс. человек и более
}
При подготовке важного отчета о городах с населением 100-999 тыс. человек был подготовлен другой объект типа map:

C-like:
cityPopulation := map[string]int{
    город: население города в тысячах человек,
}
Однако база данных с информацией о точной численности населения содержала ошибки, поэтому в cityPopulation в т.ч. была сохранена информация о городах, которые входят в другие группы из groupCity.

Ваша программа имеет доступ к обоим указанным отображениям, требуется исправить cityPopulation, чтобы в ней была сохранена информация только о городах из группы groupCity[100].

Функция main() уже объявлена, доступ к отображениям осуществляется по указанным именам. По результатам выполнения ничего больше делать не требуется, проверка будет осуществлена автоматически.


C-like:
/*
 * Группировка городов по численности населения в тысячах человек
 * от 10 до 100, от 100 до 1000 и более 1000:
 * groupCity map[int][]string{
 *     10: []string{...},
 *     100: []string{...},
 *     1000: []string{...},
 * }
 *
 * Население городов в тысячах человек:
 * cityPopulation map[string]int{...}
 */
 
C-like:
for city, _ := range cityPopulation {
        isIn := false
        for _, group := range groupCity[100] {
            if city == group {
                isIn = true
                break
            } else if city != group {
                isIn = false
            }
        }
        if isIn == false {
            delete(cityPopulation, city)
        }
    }
 
C-like:
for _, val := range groupCity[10] {
        delete(cityPopulation, val)
    }
    for _, val := range groupCity[1000] {
        delete(cityPopulation, val)
    }
 
C-like:
// Создаем множество для быстрого поиска городов из groupCity[100]
validCities := make(map[string]bool)
for _, city := range groupCity[100] {
    validCities[city] = true
}

// Проверяем и удаляем недействительные города из cityPopulation
for city := range cityPopulation {
    if !validCities[city] {
        delete(cityPopulation, city)
    }
}
 
C-like:
targetGroup := groupCity[100]
array_contains := func (a []string, s string) bool {
    for _, v := range a {
        if v==s {
            return true
        }
    }
    return false
}
for c, _ := range cityPopulation {
    if !array_contains (targetGroup, c) {
      delete (cityPopulation, c)
    }
}
 
C-like:
for k, _ := range cityPopulation {
    isCorrect := false
    for _, v := range groupCity[100] {
        if k == v {
            isCorrect = true
            break
        }
    }
    if !isCorrect {delete(cityPopulation, k)}
}
 
Back
Top