Top.Mail.Ru
Ответы

Глупые непоняточки по реверсу массива в Go

Я только начал осваивать этот язык и написал кривой реверс массива. После я решил посмотреть как это можно сделать иначе или проще, и нашел вариант решения на стековерфлоу:

123
 for i, j := len(arr)-1, 0; i > j; i, j = i-1, j+1 { 
	arr[i], arr[j] = arr[j], arr[i] 
} 

Работает, но я немного не не понимаю - как? Как значения так просто перезаписываются и не перетираются?

Ведь:

1234
 for i, j := len(arr)-1, 0; i > j; i, j = i-1, j+1 { 
	arr[j] = arr[i]
        arr[i] = arr[j]
} 

Будет не верно, ибо индексы просто начнут друг-друга перезаписывать и вместо, например, 5,4,3,2,1 я получу 1,2,3,2,1. Я понимаю как это работает, но не понимаю как работает вариант со стековерфлоу.

Объясните пожалуйста то как работает перезапись массивы в случае со стековерфлоу. И буду благодарен за источник в виде документации относящиеся к подобному роду записи.

По дате
По рейтингу
Аватар пользователя
Новичок

Значения кортежа arr[j], arr[i] вычисляются до выполнения операции присваивания.

А во втором случае операции присваивания выполняются последовательно.

Аватар пользователя

Глупый массив в Гоу и текст на Паскале