Как скопировать List<T> в многомерный массив с циклом for?
Я работаю с 3D-координатами. У меня есть все они сохранены в список, но чтобы продолжать работать с ними, мне нужно, чтобы они были в многомерном массиве (float[,]).
Мой список выглядит так:
<Coordinates> hp_List = new List<Coordinates>();
public class Coordinates
{
public float x { get; set; }
public float y { get; set; }
public float z { get; set; }
}
Я попробовал следующий код:
int R = hp_List.Count();
float[,] hp_array = new float[R, 3];
for(int i=0; i<R; i++)
{
for (int j = 0; j < hp_List.Count; j++)
{
hp_array[i, 0] = hp_List[j].x;
hp_array[i, 1] = hp_List[j].y;
hp_array[i, 2] = hp_List[j].z;
}
}
и я тоже попробовал другой способ:
for(int i=0; i<R; i++)
{
foreach (Coordinates hp_position in hp_List)
{
hp_array[i, 0] = hp_position.x;
hp_array[i, 1] = hp_position.y;
hp_array[i, 2] = hp_position.z;
}
}
Я ожидал следующий вывод:
589,5 -75,4 238,4
46,2 173,2 70,9
45,7 173,4 70,9
160,9 75,5 75,4
160 76 75,2
156,1 83,9 73,6
Мой фактический вывод
156,1
83,9
73,6
156,1
83,9
73,6
156,1
83,9
73,6
156,1
83,9
73,6
156,1
83,9
73,6
156,1
83,9
73,6
который, как вы можете видеть, является последним элементом моего списка.
Я не уверен, где моя ошибка.
2 ответа
Оба цикла перебирают все элементы в списке
for(int i=0; i<R; i++)
{
for (int j = 0; j < hp_List.Count; j++)
{
////
}
}
Не забывай это R == hp_List.Count
, Вот почему все строки в массиве содержат последние три элемента списка.
Попробуйте отбросить внутренний цикл.
for(int i=0; i<R; i++)
{
hp_array[i, 0] = hp_List[i].x;
hp_array[i, 1] = hp_List[i].y;
hp_array[i, 2] = hp_List[i].z;
}
List<Coordinates> hp_List = new List<Coordinates>
{
new Coordinates
{
x = 1,
y = 2,
z = 3
},
new Coordinates
{
x = 4,
y = 5,
z = 6
}
};
int R = hp_List.Count();
float[,,] hp_array = new float[R, 1, 3];
for (int i = 0; i < R; i++)
{
for (int j = 0; j < 1; j++)
{
hp_array[i, j, 0] = hp_List[j].x;
hp_array[i, j, 1] = hp_List[j].y;
hp_array[i, j, 2] = hp_List[j].z;
}
}
Console.WriteLine(string.Format("X Y Z"));
for (int i = 0; i< R; i++)
{
Console.WriteLine(string.Format("{0} {1} {2}", hp_array[i, 0, 0], hp_array[i, 0, 1], hp_array[i, 0, 2]));
}
Console.Read();
Выход
XYZ
1 2 3
4 5 6