我需要迭代任意排名的数组。这是为了阅读和写作,所以GetEnumerator
不管用。
Array.SetValue(object, int)
不适用于多维数组。Array.SetValue(object, params int[])
需要过多的算术来迭代多维空间。它还需要动态调用来绕过params
签名的一部分。
我很想固定数组并用指针迭代它,但我找不到任何说明多维数组保证是连续的文档。如果它们在尺寸的末尾有填充,那么这是行不通的。我也希望避免不安全的代码。
有没有一种简单的方法可以仅使用单个索引来顺序寻址多维数组?
多维数组保证是连续的。来自 ECMA-335:
数组元素应按行主序排列在数组对象中(即与最右边的数组维度关联的元素)应连续布置从最低到最高指数)。
所以这有效:
int[,,,] array = new int[10, 10, 10, 10];
fixed (int* ptr = array)
{
ptr[10] = 42;
}
int result = array[0, 0, 1, 0]; // == 42
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)