Подтвердить что ты не робот

Как перебрать карту в Голанге по порядку?

Пожалуйста, см. ниже мою карту.

var romanNumeralDict map[int]string = map[int]string{
  1000: "M",
  900 : "CM",
  500 : "D",
  400 : "CD",
  100 : "C",
  90  : "XC",
  50  : "L",
  40  : "XL",
  10  : "X",
  9   : "IX",
  5   : "V",
  4   : "IV",
  1   : "I",
}

Я просматриваю эту карту в порядке размера ключа

  for k, v := range romanNumeralDict {
    fmt.Println("k:", k, "v:", v)
  }

Однако это выводит

k: 1000 v: M
k: 40 v: XL
k: 5 v: V
k: 4 v: IV
k: 900 v: CM
k: 500 v: D
k: 400 v: CD
k: 100 v: C
k: 90 v: XC
k: 50 v: L
k: 10 v: X
k: 9 v: IX
k: 1 v: I

Есть ли способ, чтобы я мог распечатать их в порядке размера ключа, поэтому я хотел бы пропустить эту карту, как это показано ниже.

k:1
K:4
K:5
K:9
k:10

и т.д...

Большое спасибо за вашу помощь!

4b9b3361

Ответ 1

Соберите все ключи, отсортируйте их и выполните итерацию карты по ключу, например:

keys := make([]int, 0)
for k, _ := range romanNumeralDict {
    keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
    fmt.Println(k, romanNumeralDict[k])
}

Ответ 2

Вы можете сделать это немного быстрее, предварительно распределяя keys потому что вы знаете его длину:

func sortedKeys(m map[Key]Value) ([]Key) {
        keys := make([]Key, len(m))
        i := 0
        for k := range m {
            keys[i] = k
            i++
        }
        sort.Keys(keys)
        return keys
}

Замените Key и Value на ваш тип ключа и значения (включая строку sort). кашель дженерики кашель

Ответ 3

Просто распечатайте карту. Все ответы здесь теперь содержат старое поведение карт. В Go 1. 12+ вы можете просто напечатать значение карты, и оно будет автоматически отсортировано по ключу. Это было добавлено, потому что это позволяет легко тестировать значения карты.

func main() {
    m := map[int]int{3: 5, 2: 4, 1: 3}
    fmt.Println(m)

    // In Go 1.12+
    // Output: map[1:3 2:4 3:5]

    // Before Go 1.12 (the order was undefined)
    // map[3:5 2:4 1:3]
}

Карты теперь печатаются в порядке сортировки ключей, чтобы упростить тестирование. Правила заказа:

  • Когда применимо, ноль сравнивает низкий
  • порядок чисел, чисел с плавающей точкой и строк по <
  • NaN сравнивает меньше, чем не-NaN
  • bool сравнивает false перед true
  • Комплекс сравнивает реальное, а затем и воображаемое
  • Указатели сравниваются по машинному адресу
  • Значения каналов сравниваются по машинному адресу
  • Структуры сравнивают каждое поле по очереди
  • Массивы сравнивают каждый элемент по очереди
  • Значения интерфейса сначала сравниваются по отражению. Тип, описывающий конкретный тип, а затем по конкретному значению, как описано в предыдущих правилах.

При печати карт значения неотражающих ключей, такие как NaN, ранее отображались как. Начиная с этого выпуска, правильные значения печатаются.

Узнайте больше здесь.