英文:
How to find the dimensions of a (2,3 or if possible an n)dimensional slice in golang and verify if its a matrix?
问题
例如:[][]float64{{11, 5, 14, 1}, {11, 5, 14, 1}}
的维度是 [2,4]
。
如果将其传递给一个函数,那么最有效的方法是如何找到这里的维度?
谢谢。
英文:
For example : [][]float64{{11, 5, 14, 1}, {11, 5, 14, 1}}
has dimensions [2,4]
.
If this is passed to a function then what is the most efficient way to find the dimension here?
Thanks
答案1
得分: 2
外部维度只是len(x)
,其中x
是您传递给函数的切片的切片(例如[][]float64{{11, 5, 14, 1}, {11, 5, 14, 1}}
)。
然而,内部维度不能保证相等,所以您需要遍历每个元素并检查它们的len
。
如果您保证x
的每个元素具有相同数量的元素,只需找到len(x[0])
,如果len(x) > 0
。
英文:
The outer dimension is just len(x)
where x
is the slice of slices you pass to the function (your example [][]float64{{11, 5, 14, 1}, {11, 5, 14, 1}}
).
However, the inner dimensions are not guaranteed to be equal so you will have to go through each element and check what len
they have.
If you have the guarantee than each element of x
has the same number of elements, just find len(x[0])
if len(x) > 0
.
答案2
得分: 1
Go只提供一维数组和切片。可以通过使用数组的数组来模拟N维数组,这与你正在做的事情接近——你有一个一维切片,其中包含两个一维切片。
这是有问题的,因为切片的长度是不确定的。所以你可能会得到长度差异很大的切片:
[][]float64{
{1, 2, 3, 4},
{5, 6, 7, 8, 9, 10},
}
如果你使用实际的数组,这会更简单,因为数组有固定的长度:
[2][4]float64
你可以将其扩展到任意多的维度:
[2][4][8]float64
提供了三个维度,分别为2、4和8。
然后,你可以通过在任何元素上使用内置的len()
函数来确定每个维度的容量:
foo := [2][4][7]float64{}
x := len(foo) // x == 2
y := len(foo[0]) // y == 4
z := len(foo[0][0]) // z == 8
英文:
Go only provides 1-dimensional arrays and slices. N-dimensional arrays can be emulated by using arrays of arrays, which is close to what what you're doing--you have a 1-dimensional slice, which contains 2 1-dimensional slices.
This is problematic, because slices are not of a defined length. So you could end up with slices of wildly different lengths:
[][]float64{
{1, 2, 3, 4},
{5, 6, 7, 8, 9, 10},
}
If you use actual arrays, this is simpler, because arrays have a fixed length:
[2][4]float64
You can extend this to as many dimensions as you want:
[2][4][8]float64
provides three dimensions, with respective depths of 2, 4, and 8.
Then you can tell the capacity of each dimension by using the built-in len()
function on any of the elements:
foo := [2][4][7]float64{}
x := len(foo) // x == 2
y := len(foo[0]) // y == 4
z := len(foo[0][0]) // z == 8
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论