Tôi đang viết hàm Go có kiểu bắt chước itertools.permutations()
của Python, nhưng trả lại tất cả hoán vị cùng một lúc thay vì cho phép một lần tại một thời điểm.Golang - Hành vi đa nhiệm không mong đợi
tôi nhìn thấy hành vi bất ngờ khi cập nhật 2 biến cùng một lúc trong dòng mã sau đây:
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:]...)
}
tôi nhận được kết quả chính xác khi tách bản cập nhật trên:
current[i] = setcopy[c]
setcopy = append(setcopy[:c], setcopy[c+1:]...)
tôi chủ yếu được lấy cảm hứng từ các ví dụ Pop
và Delete
từ bài viết wiki SliceTricks. Có sự khác biệt đáng kể nào giữa điều đó và những gì tôi đang cố gắng làm không?
Nếu bạn muốn kiểm tra mã đầy đủ (bao gồm ví dụ về đầu ra bị lỗi và một số báo cáo in để gỡ lỗi), bạn có thể xem this Gist.
Tôi không nghĩ vậy, vì 'append' được sử dụng trong nhiệm vụ thực sự làm giảm kích thước của slice/xóa một phần tử (và như vậy, một mảng cơ bản mới sẽ không cần thiết). – Redy
Không thể giải thích tại sao, nhưng đầu ra là giống như nếu 'append' chạy đầu tiên: http://play.golang.org/p/ZQ-4cMyNTJ – twotwotwo
Nó trông giống như bạn đang hứa trái-to- đúng thứ tự eval - nếu không có ai đến với một lý do chính đáng ở đây, tôi sẽ nhấn golang-nut với điều này, có vẻ thực sự kỳ quặc. – twotwotwo