Telegram Group & Telegram Channel
🔍 Вопрос: что выведет этот код?

package main

import (
"fmt"
)

func main() {
m := map[string]int{"a": 1, "b": 2}
keys := make([]string, 0, len(m))

for k := range m {
keys = append(keys, k)
}

for i := range keys {
delete(m, keys[i])
m["z"] = i
}

fmt.Println("map:", m)
fmt.Println("keys:", keys)
}

---
Ответ: Вывод программы будет зависеть от порядка итерации по ключам в исходной мапе m.

В Go порядок итерации по элементам map не гарантируется и может меняться от запуска к запуску.
Рассмотрим возможные варианты развития событий, предполагая два наиболее вероятных порядка итерации:

Сценарий 1: Порядок итерации - "a", "b"
Итерация 1:
k становится "a".
keys становится ["a"].
Удаляется элемент с ключом "a" из m. m теперь {"b": 2}.
Добавляется элемент {"z": 0} в m. m теперь {"b": 2, "z": 0}.
Итерация 2:
k становится "b".
keys становится ["a", "b"].
Удаляется элемент с ключом "b" из m. m теперь {"z": 0}.
Добавляется элемент {"z": 1} в m (перезаписывая предыдущее значение). m теперь {"z": 1}.
В этом случае вывод будет:
map: map["z":1]
keys: [a b]
Сценарий 2: Порядок итерации - "b", "a"

Итерация 1:
k становится "b".
keys становится ["b"].
Удаляется элемент с ключом "b" из m. m теперь {"a": 1}.
Добавляется элемент {"z": 0} в m. m теперь {"a": 1, "z": 0}.

Итерация 2:
k становится "a".
keys становится ["b", "a"].
Удаляется элемент с ключом "a" из m. m теперь {"z": 0}.
Добавляется элемент {"z": 1} в m (перезаписывая предыдущее значение). m теперь {"z": 1}.
В этом случае вывод будет:
map: map["z":1]
keys: [b a]

Итог:
Гарантируется, что:
Значение в мапе m после выполнения цикла всегда будет map["z":1]. Это происходит потому, что в каждой итерации старое значение ключа "z" перезаписывается.

Слайс keys будет содержать ключи исходной мапы в том порядке, в котором они были получены при первой итерации. Это может быть ["a", "b"] или ["b", "a"], или какой-либо другой порядок, если мапа была больше.

Поэтому возможные варианты вывода:
Вариант 1:
map: map["z":1]
keys: [a b]
Вариант 2:
map: map["z":1]
keys: [b a]
Какой именно вариант вы увидите при запуске, предсказать невозможно из-за недетерминированного порядка итерации по map в Go.



tg-me.com/golangtests/768
Create:
Last Update:

🔍 Вопрос: что выведет этот код?


package main

import (
"fmt"
)

func main() {
m := map[string]int{"a": 1, "b": 2}
keys := make([]string, 0, len(m))

for k := range m {
keys = append(keys, k)
}

for i := range keys {
delete(m, keys[i])
m["z"] = i
}

fmt.Println("map:", m)
fmt.Println("keys:", keys)
}

---
Ответ: Вывод программы будет зависеть от порядка итерации по ключам в исходной мапе m.

В Go порядок итерации по элементам map не гарантируется и может меняться от запуска к запуску.
Рассмотрим возможные варианты развития событий, предполагая два наиболее вероятных порядка итерации:

Сценарий 1: Порядок итерации - "a", "b"
Итерация 1:
k становится "a".
keys становится ["a"].
Удаляется элемент с ключом "a" из m. m теперь {"b": 2}.
Добавляется элемент {"z": 0} в m. m теперь {"b": 2, "z": 0}.
Итерация 2:
k становится "b".
keys становится ["a", "b"].
Удаляется элемент с ключом "b" из m. m теперь {"z": 0}.
Добавляется элемент {"z": 1} в m (перезаписывая предыдущее значение). m теперь {"z": 1}.
В этом случае вывод будет:
map: map["z":1]
keys: [a b]
Сценарий 2: Порядок итерации - "b", "a"

Итерация 1:
k становится "b".
keys становится ["b"].
Удаляется элемент с ключом "b" из m. m теперь {"a": 1}.
Добавляется элемент {"z": 0} в m. m теперь {"a": 1, "z": 0}.

Итерация 2:
k становится "a".
keys становится ["b", "a"].
Удаляется элемент с ключом "a" из m. m теперь {"z": 0}.
Добавляется элемент {"z": 1} в m (перезаписывая предыдущее значение). m теперь {"z": 1}.
В этом случае вывод будет:
map: map["z":1]
keys: [b a]

Итог:
Гарантируется, что:
Значение в мапе m после выполнения цикла всегда будет map["z":1]. Это происходит потому, что в каждой итерации старое значение ключа "z" перезаписывается.

Слайс keys будет содержать ключи исходной мапы в том порядке, в котором они были получены при первой итерации. Это может быть ["a", "b"] или ["b", "a"], или какой-либо другой порядок, если мапа была больше.

Поэтому возможные варианты вывода:
Вариант 1:
map: map["z":1]
keys: [a b]
Вариант 2:
map: map["z":1]
keys: [b a]
Какой именно вариант вы увидите при запуске, предсказать невозможно из-за недетерминированного порядка итерации по map в Go.

BY Go tests


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/golangtests/768

View MORE
Open in Telegram


Go tests Telegram | DID YOU KNOW?

Date: |

The seemingly negative pandemic effects and resource/product shortages are encouraging and allowing organizations to innovate and change.The news of cash-rich organizations getting ready for the post-Covid growth economy is a sign of more than capital spending plans. Cash provides a cushion for risk-taking and a tool for growth.

Can I mute a Telegram group?

In recent times, Telegram has gained a lot of popularity because of the controversy over WhatsApp’s new privacy policy. In January 2021, Telegram was the most downloaded app worldwide and crossed 500 million monthly active users. And with so many active users on the app, people might get messages in bulk from a group or a channel that can be a little irritating. So to get rid of the same, you can mute groups, chats, and channels on Telegram just like WhatsApp. You can mute notifications for one hour, eight hours, or two days, or you can disable notifications forever.

Go tests from in


Telegram Go tests
FROM USA