Я пишу функцию Go, которая подражает Python itertools.permutations()
, но возвращает все перестановки сразу, а не дает по одному.Golang - Неожиданное поведение с несколькими присваиваниями
Я вижу неожиданное поведение при обновлении 2 переменных в то же время в следующих строках коды:
setcopy := append([]int(nil), sorted...)
for i := 0; i < r; i++ {
c := counters[r-1-i]
current[i], setcopy = setcopy[c], append(setcopy[:c], setcopy[c+1:]...)
}
я получить правильные результаты при развязке вышеупомянутого обновления:
current[i] = setcopy[c]
setcopy = append(setcopy[:c], setcopy[c+1:]...)
I был в основном вдохновлен Pop
и Delete
примерами статьи wiki SliceTricks. Есть ли существенная разница между тем и тем, что я пытаюсь сделать?
Если вы хотите проверить полный код (включая пример неисправного вывода и некоторые инструкции печати для отладки), вы можете проверить this Gist.
Я так не думаю, так как 'append', используемый в присваивании, фактически уменьшает размер фрагмента/удаления элемента (и как таковой новый массив не понадобится). – Redy
Не могу объяснить, почему, но результат такой же, как если бы 'append' запускался первым: http://play.golang.org/p/ZQ-4cMyNTJ – twotwotwo
Кажется, что вы обещали, правильный порядок eval - если никто не придумает здесь вескую причину, я бы ударил golang-nuts этим, кажется действительно странным. – twotwotwo