double[][] ServicePoint = new double[10][9]; // <-- gives an error (1)
double[,] ServicePoint = new double[10,9]; // <-- ok (2)
Run Code Online (Sandbox Code Playgroud)
他们的区别是什么?(1)产生错误,是什么原因?
和
double d = new double[9]
ServicePoint[0] = d;
Run Code Online (Sandbox Code Playgroud)
使用(2)将提示错误.为什么?
我需要创建一个数字组合列表.数字很小所以我可以使用byte而不是int.但是,它需要许多嵌套循环才能获得所有可能的组合.我想知道是否有更有效的方式来做我想要的事情.到目前为止的代码是:
var data = new List<byte[]>();
for (byte a = 0; a < 2; a++)
for (byte b = 0; b < 3; b++)
for (byte c = 0; c < 4; c++)
for (byte d = 0; d < 3; d++)
for (byte e = 0; e < 4; e++)
for (byte f = 0; f < 3; f++)
for (byte g = 0; g < 3; g++)
for (byte h = 0; h < …Run Code Online (Sandbox Code Playgroud) 声明多维数组并为其赋值的正确方法是什么?
这就是我所拥有的:
int x = 5;
int y = 5;
String[][] myStringArray = new String [x][y];
myStringArray[0][x] = "a string";
myStringArray[0][y] = "another string";
Run Code Online (Sandbox Code Playgroud) string[][] Tablero = new string[3][3];
Run Code Online (Sandbox Code Playgroud)
我需要一个3x3阵列安排来保存信息.我如何在C#中声明这个?
c# arrays jagged-arrays multidimensional-array array-initialization
锯齿状数组和多维数组之间有什么区别.彼此之间有什么好处?
为什么Visual Studio不允许我这样做
MyClass[][] abc = new MyClass[10][20];
Run Code Online (Sandbox Code Playgroud)
(我们曾经在C++中这样做,但在C#中它用红色蠕动线强调[20] ..说无效的等级说明符)
但很高兴
MyClass[,] abc = new MyClass[10,20];
Run Code Online (Sandbox Code Playgroud)最后,我如何在一行中初始化它(就像我们在简单数组中一样{new xxx...}{new xxx....})
MyClass[][,][,] itemscollection;
Run Code Online (Sandbox Code Playgroud)Array 声明如下:
public abstract class Array
: ICloneable, IList, ICollection, IEnumerable {
Run Code Online (Sandbox Code Playgroud)
我想知道为什么不是它:
public partial class Array<T>
: ICloneable, IList<T>, ICollection<T>, IEnumerable<T> {
Run Code Online (Sandbox Code Playgroud)
如果它被声明为泛型类型会有什么问题?
如果它是泛型类型,我们还需要非泛型吗?如果我们愿意的话,它是否可以衍生出来Array<T>(如上所述)?
public partial class Array: Array<object> {
Run Code Online (Sandbox Code Playgroud)更新:
第二点对于不再使非泛型Array成为基本类型的假设也很重要.
编辑:我向大家道歉.我实际上想要说"多维数组"时使用了"锯齿状数组"一词(如下面的例子所示).我为使用错误的名字道歉.我实际上发现锯齿状阵列比多维阵列更快!我已经为锯齿状阵列添加了测量值.
我试图用一个 盘陀今天的多维数组,当我注意到它的性能并不像我预期的那样.使用单维数组和手动计算索引要比使用2D数组快得多(几乎两倍).我使用1024*1024数组(初始化为随机值)编写了一个测试 ,进行了1000次迭代,我在我的机器上得到了以下结果:
sum(double[], int): 2738 ms (100%)
sum(double[,]): 5019 ms (183%)
sum(double[][]): 2540 ms ( 93%)
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码:
public static double sum(double[] d, int l1) {
// assuming the array is rectangular
double sum = 0;
int l2 = d.Length / l1;
for (int i = 0; i < l1; ++i)
for (int j = 0; j < l2; ++j)
sum += d[i * l2 + j];
return sum;
}
public static double sum(double[,] d) …Run Code Online (Sandbox Code Playgroud) 我最近出现在面试中,面试官问我一个关于Arrays和的问题ArrayList.
他问我,如果一个数组的数组可以是多维的,那么,为什么是ArrayList的ArrayList"不是多维?
例如:
// Multidimensional
int[][] array = new int[m][n];
// Not multidimensional
ArrayList<ArrayList<Integer>> seq = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我理解这个吗?
我试图在我的游戏中将3D阵列压平为1D阵列中的"块"系统.这是一个3D块游戏,基本上我希望块系统几乎与Minecraft的系统相同(但是,这不是Minecraft克隆的任何措施).在我以前的2D游戏中,我使用以下算法访问了扁平化数组:
Tiles[x + y * WIDTH]
Run Code Online (Sandbox Code Playgroud)
然而,这显然不适用于3D,因为它缺少Z轴.我不知道如何在3D空间中实现这种算法.宽度,高度和深度都是常量(宽度和高度一样大).
是x + y*WIDTH + Z*DEPTH吗?我的数学非常糟糕,我只是开始进行3D编程,所以我很丢失:|
PS.这样做的原因是我循环并从索引中获取相当多的东西.我知道1D阵列比多维阵列更快(我记得的原因是:P).即使这可能没有必要,我希望尽可能好的表现:)
我想用C#创建数组10*10*10 int[][][](不是int[,,]).
我可以写代码:
int[][][] count = new int[10][][];
for (int i = 0; i < 10; i++) {
count[i] = new int[10][];
for (int j = 0; j < 10; j++)
count[i][j] = new int[10];
}
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种更美好的方式.可能是这样的:
int[][][] count = new int[10][10][10];
Run Code Online (Sandbox Code Playgroud)