我有以下[] []界面{}:
[
[1 65535 62242] [1 65531 20924] [1 96 229] [1 52 208] [1 58 207]
[2 65535 62680] [2 65531 20654] [2 28 212] [2 64 211] [2 17 210] [2 75 208]
[3 65535 62297] [3 65531 20694] [3 30 208] [3 87 207] [3 3 205] [3 36 204]
]
我需要移动元素才能获得以下结果:
[
[1 65535 62242] [1 65531 20924] [1 96 229] [1 52 208] [1 58 207]
[3 65535 62297] [3 65531 20694] [3 30 208] [3 87 207] [3 3 205] [3 36 204]
[2 65535 62680] [2 65531 20654] [2 28 212] [2 64 211] [2 17 210] [2 75 208]
]
我已经检查了' Slicetricks'页面,但经过测试和测试后,我无法找到方法。
答案 0 :(得分:1)
这是一个包含17个元素的切片,每个元素都是另一个切片。我需要将元素从位置11:16(第一个元素为3的那些切片)移动到位置5:10
如果您了解切片如何引用基础数组(如果不这样,请阅读https://blog.golang.org/go-slices-usage-and-internals),并且您有要交换的特定元素,则可以在这些元素上创建两个切片并按顺序交换它们。如果你所关心的只是移动东西,你所移动的东西并不重要。
sl0 = []AnyType{...}
sl1 = sl0[5:11] // last element is exclusive, so use to 11 if you need 10
sl2 = sl0[11:]
for i := 0; i < len(sl1); i++ {
sl1[i], sl2[i] = sl2[i], sl1[i]
}
在此之后,sl0将包含交换特定元素的整个切片。
请注意,因为使用这种方法存在各种不良索引的可能性。在运行时失败之前,您应该使用检查来捕获它们。