2014-10-29 52 views
1

我有这个阵列的位置:c# - 如何添加一个值到多个数组?

float[, ,] vectors; 

int pos = 0; 

void Start() { 
    vectors = new float[,,] { { 
     { 0, 1, 1 }, 
     { 0, 2, 2 } } 
    };   
} 

这工作。我用数字填充数组。

现在我想再给一个给定的位置添加一些值。但是如何?

这不工作:

vectors[pos] = new float[,,] { { { 33, 44, 55 } } };  

vectors[pos] = { { { 33, 44, 55 } } };  

我搜索,但没有找到合适的答案。

编辑: 我想是这样的:

[0]+ 
    [0] {1, 2, 3}, 
    [1] {4, 5, 6} 

[1]+ 
    [0] {11, 22, 33}, 
    [1] {44, 55, 66}, 
    [2] {77, 88, 99} 

... 
etc. 

现在,如我想将值{10,10,10}添加到pos = 0,但是如何?

+2

您声明它作为一个多维数组,但使用它作为[阵列]数组的数组。 [请参阅区别](http://stackoverflow.com/questions/597720/what-are-the-differences-between-a-multidimensional-array-and-an-array-of-arrays) – kennyzx 2014-10-29 13:47:18

+1

您可能想要使用一个Vector类,并将它们放入一个通用列表中,而不是一个多维数组。 – juharr 2014-10-29 13:48:19

+0

我该如何解决它与数组?我想要一个三维数组。这不可能吗? – Johnny 2014-10-29 13:53:24

回答

2

如果你想添加值,我建议使用泛型列表而不是数组。你应该创建你自己的Vector类,或者找到一个适合你需求的类。

public class Vector 
{ 
    public float X { get; private set; } 
    public float Y { get; private set; } 
    public float Z { get; private set; } 

    public Vector(float x, float y, float z) 
    { 
     X = x; 
     Y = y; 
     Z = z; 
    } 
} 

然后,你可以做以下

var vectors = new List<List<Vector>> 
{ 
    new List<Vector>{ 
     new Vector(0, 1, 1), 
     new Vector(0, 2, 2) 
    } 
}; 

vectors[0].Add(new Vector(33,44,55)); 

而且你的载体含有

[0] 
    [0] {0, 1, 1} 
    [1] {0, 2, 2} 
    [2] {33, 44, 55} 

请注意,如果您需要添加到第一渔政船,你必须这样做。

vectors.Add(new List<Vector>()); 

vectors[1].Add(new Vector(1, 2, 3)); 

现在,必须

[0] 
    [0] {0, 1, 1} 
    [1] {0, 2, 2} 
    [2] {33, 44, 55} 
[1] 
    [0] {1, 2, 3} 
+0

这工作。 :) – Johnny 2014-10-29 14:27:56

+0

它工作的原因是因为它没有使用静态数组,这些数组是连续的内存块,并且在赋值之后无法更改,因此它们是表示正在做什么的更好方法。我提供的答案基本上是一样的,尽管List有默认提供的容量,所以效率更高一些。这个答案也有给你一个强大的类型来解决你的坐标的优势。所有,如果它的正确点我认为一个结构更好。 – 2014-10-29 14:42:21

0

你应该确定数组中的其他位置,你只是指定一个。如果您的问题不能名单内解决 你可以试试数组的数组如下

float [][][] x = new float [n][m][]; 

// initialize the third dimension until m is reached 
x[0] = new float {1,2,3,4,5}; // specify whatever value you want 
x[1] = new float {3,2,4}; 
x[2] = new float [3]; 

// etc until m is reached 
// do the same for the n dimension 
0

这会为你工作,数组分配,你不能改变它,你必须展开数组原样。

float[, ,] vectors; 

int pos = 0; 

vectors = new float[,,] 
{ 
    { 
     { 0, 1, 2 }, { 0, 3, 4 } 
    } 
};   


vectors = new float[,,] 
    { 
     { 
      {vectors[0,0,0], vectors[0,0,1], vectors[0,0,2]}, { vectors[0,1,0], vectors[0,1,1], vectors[0,1,2] }, { 33,44,55} 
     } 
    }; 
+0

这工作。我知道。但是我不能为我想要的职位添加新的价值观。这仅用于更改值。 – Johnny 2014-10-29 14:12:27

+0

你是说你想要更多的条目,因为这是不能动态扩展数组 – 2014-10-29 14:13:19

+0

我编辑我的问题。 – Johnny 2014-10-29 14:15:57