我如何获取一组数组(字符串)并在 Golang 中创建这些数组的多维切片?
How do I take a set of arrays (strings) and create a multidimensional slice of those arrays in Golang?
我正在尝试实现一个函数,当传递一个字符串数组时,它会创建一个数组片段,并将传递的每个数组添加到其中。它将 return 传递的所有数组的最后一部分。
作为测试,我初始化了 4 个数组并尝试创建一个函数来执行此操作。然而,它失败得很惨。这是我到目前为止所拥有的。不知道该怎么做。
func main() {
array1 := []string{"x", "o", "x", "_", "_"}
array2 := []string{"0", "o", "x", "_", "_"}
array3 := []string{"o", "o", "o", "_", "_"}
array4 := []string{"o", "o", "o", "o", "o"}
FinalSlice(array1)
FinalSlice(array2)
FinalSlice(array3)
fmt.Println(FinalSlice(array4))
}
func FinalSlice(array []string) [][]string {
var slice [][]string
for i, _ := range slice {
slice[i] = array
}
return slice
}
现在这是输出:
[]
那是因为你遍历了一个没有元素的空切片。
所以你的循环
for i, _ := range slice {}
实际上会 运行 0 次迭代(这就是为什么你最终得到一个空数组)。
我不明白你想要达到的确切结果,但如果你想将数组连接成一个multi-dimensional,你可以使用下面的代码:
package main
import "fmt"
func AppendSlice(source [][]string, value []string) [][]string {
return append(source, value)
}
func main() {
array1 := []string{"x", "o", "x", "_", "_"}
array2 := []string{"0", "o", "x", "_", "_"}
array3 := []string{"o", "o", "o", "_", "_"}
array4 := []string{"o", "o", "o", "o", "o"}
var finalArray [][]string
finalArray = AppendSlice(finalArray, array1)
finalArray = AppendSlice(finalArray, array2)
finalArray = AppendSlice(finalArray, array3)
finalArray = AppendSlice(finalArray, array4)
// [[x o x _ _] [0 o x _ _] [o o o _ _] [o o o o o]]
fmt.Println(finalArray)
}
这可能会在很多方面得到改进,请随意尝试这个解决方案:https://go.dev/play/p/vXvqlRZuOUI
就不能像这样说
func bundleSlices( slices ...[]int) [][]int {
return slices
}
然后:
package main
import "fmt"
func main() {
arr1 := []int{1, 2, 3}
arr2 := []int{4, 5, 6}
arr3 := []int{7, 8, 9}
bundled := bundleSlices( arr1, arr2, arr3 )
fmt.Println(bundled)
}
获得
[[1 2 3] [4 5 6] [7 8 9]]
我正在尝试实现一个函数,当传递一个字符串数组时,它会创建一个数组片段,并将传递的每个数组添加到其中。它将 return 传递的所有数组的最后一部分。
作为测试,我初始化了 4 个数组并尝试创建一个函数来执行此操作。然而,它失败得很惨。这是我到目前为止所拥有的。不知道该怎么做。
func main() {
array1 := []string{"x", "o", "x", "_", "_"}
array2 := []string{"0", "o", "x", "_", "_"}
array3 := []string{"o", "o", "o", "_", "_"}
array4 := []string{"o", "o", "o", "o", "o"}
FinalSlice(array1)
FinalSlice(array2)
FinalSlice(array3)
fmt.Println(FinalSlice(array4))
}
func FinalSlice(array []string) [][]string {
var slice [][]string
for i, _ := range slice {
slice[i] = array
}
return slice
}
现在这是输出:
[]
那是因为你遍历了一个没有元素的空切片。
所以你的循环
for i, _ := range slice {}
实际上会 运行 0 次迭代(这就是为什么你最终得到一个空数组)。
我不明白你想要达到的确切结果,但如果你想将数组连接成一个multi-dimensional,你可以使用下面的代码:
package main
import "fmt"
func AppendSlice(source [][]string, value []string) [][]string {
return append(source, value)
}
func main() {
array1 := []string{"x", "o", "x", "_", "_"}
array2 := []string{"0", "o", "x", "_", "_"}
array3 := []string{"o", "o", "o", "_", "_"}
array4 := []string{"o", "o", "o", "o", "o"}
var finalArray [][]string
finalArray = AppendSlice(finalArray, array1)
finalArray = AppendSlice(finalArray, array2)
finalArray = AppendSlice(finalArray, array3)
finalArray = AppendSlice(finalArray, array4)
// [[x o x _ _] [0 o x _ _] [o o o _ _] [o o o o o]]
fmt.Println(finalArray)
}
这可能会在很多方面得到改进,请随意尝试这个解决方案:https://go.dev/play/p/vXvqlRZuOUI
就不能像这样说
func bundleSlices( slices ...[]int) [][]int {
return slices
}
然后:
package main
import "fmt"
func main() {
arr1 := []int{1, 2, 3}
arr2 := []int{4, 5, 6}
arr3 := []int{7, 8, 9}
bundled := bundleSlices( arr1, arr2, arr3 )
fmt.Println(bundled)
}
获得
[[1 2 3] [4 5 6] [7 8 9]]