List<T>
aからMx1 double [、]配列に値を簡潔に抽出して、コードの行を減らすことは可能ですか?
私は次のように定義されたタイプを持っています:
public class Trajectory
{
public Vector3 Position { get; set; }
// ... more codes
}
そしてVector3は次のように定義されます:
public struct Vector3
{
public float X;
public float Y;
public float Z;
public Vector3(float x, float y, float z)
{
X = x;
Y = y;
Z = z;
}
// ... more vector3 operators
}
現時点で私は持っていList<Trajectory> trajectory
ます。最大80エントリあります。trajectory
各エントリのX、Y、X値のみを240 x 1 double[,]
配列(X、Y、Zの順に)として格納したいと思います。
私の現在の解決策はかなり長くて醜いです。ここに行きます:
// take a snapshot of current trajectory
List<Entry> tempEntry = new List<Entry> (Entries);
// create a temporary vector3Values
List<Vector3> vector3Values = new List<Vector3>();
foreach (Entry e in tempEntry)
{
vector3Values.Add(new Vector3(e.Position.X, e.Position.Y, e.Position.Z));
}
/* Start an index at 0.
* This is for foreach iteration to extract the value of x, y, and z from each vector3
*/
int index = 0;
// find the size of the list, in case max limit is changed
int listCount = inputVector3.Count;
/* set the length of the new array by multiplying the size of the list by 3.
* We want:
* [x1 x2 x3...xn y1 y2 y3...yn z1 z2 z3...zn]'.
* Therefore, the size of the reshaped array is three times of the original array *
*/
int maxRowLength = listCount * 3;
// create double[,] variable to store the reshaped data, three times the length of the actual list.
double[,] result = new double[maxRowLength, 1];
// start going for each vector, then store the x components in the double[,] array.
foreach (Vector3 vector3 in inputVector3)
{
result[index, 0] = vector3.X;
index++;
}
/* continuing from the previous index value, start going for each vector,
* then store the z components in the double[,] array.
*/
foreach (Vector3 vector3 in inputVector3)
{
result[index, 0] = vector3.Y;
index++;
}
/* continuing from the previous index value, start going for each vector,
* then store the z components in the double[,] array.
*/
foreach (Vector3 vector3 in inputVector3)
{
result[index, 0] = vector3.Z;
index++;
}
一日の終わりに、私は欲しいものを手に入れました。M x 1 double [、]配列。現時点で必要なMatlabのMWArrayオブジェクトとの相互運用性のためにdouble[、]を使用しています。
だから、問題は、私がここでやっていることを達成するための簡潔な方法はありますか?
編集済み:この変換は1秒間に何度も必要になります(この問題を提起してくれたChris Sinclairに感謝します)が、現時点では問題ではありません。