And*_*hin 18 .net c# jagged-arrays
我想用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)
dtb*_*dtb 24
int[][][] my3DArray = CreateJaggedArray<int[][][]>(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
运用
static T CreateJaggedArray<T>(params int[] lengths)
{
return (T)InitializeJaggedArray(typeof(T).GetElementType(), 0, lengths);
}
static object InitializeJaggedArray(Type type, int index, int[] lengths)
{
Array array = Array.CreateInstance(type, lengths[index]);
Type elementType = type.GetElementType();
if (elementType != null)
{
for (int i = 0; i < lengths[index]; i++)
{
array.SetValue(
InitializeJaggedArray(elementType, index + 1, lengths), i);
}
}
return array;
}
Run Code Online (Sandbox Code Playgroud)
Mec*_*eli 12
你可以试试这个:
int[][][] data =
{
new[]
{
new[] {1,2,3}
},
new[]
{
new[] {1,2,3}
}
};
或者没有明确的值:
int[][][] data =
{
new[]
{
Enumerable.Range(1, 100).ToArray()
},
new[]
{
Enumerable.Range(2, 100).ToArray()
}
};
没有内置的方法来创建一个数组并在其中创建所有元素,因此它甚至不会接近你想要它的简单程度.这将是真正的工作.
您可以创建一个方法来创建数组及其中的所有对象:
public static T[] CreateArray<T>(int cnt, Func<T> itemCreator) {
T[] result = new T[cnt];
for (int i = 0; i < result.Length; i++) {
result[i] = itemCreator();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以用它来创建一个三级锯齿状数组:
int[][][] count = CreateArray<int[][]>(10, () => CreateArray<int[]>(10, () => new int[10]));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17875 次 |
| 最近记录: |