c# - Converting multidimensional array elements to different type -



c# - Converting multidimensional array elements to different type -

suppose have multidimensional array:

float[][,] vertices = { new float[,]{ {0f, 1.28f}, {1.28f, 2.56f}, {3.84f, 2.56f}, {5.12f, 1.28f}, {3.84f, 0f}, {1.28f, 0f}, {0f, 1.28f} }, new float[,]{ {0f, 3.83f}, {1.27f, 5.12f}, {3.87f, 5.12f}, {5.12f, 3.83f}, {5.12f, 1.26f}, {3.87f, 0f}, {1.27f, 0f}, {0f, 1.26f}, {0f, 3.83f} } };

now, want convert each subarray array of type vector2[] vector2 public class, contains x , y properties:

public class vector2 { public float x; public float y; public vector2(float x, float y) { this.x = x; this.y = y } }

so want build vector2 elements array[2] elements, subarrays in above vertices array variable.

i this:

array.convertall(vertices[0], new converter<float[], vector2>(verticessequence => { homecoming new vector2(verticessequence[0], verticessequence[1]); }));

however, in homecoming receive error message:

error 15 best overloaded method match 'system.array.convertall(float[][], system.converter)' has invalid arguments

you have array, contains 2 arrays, each of contains different number of float arrays.

array.convertall suitable converting 1 array other specifying mapping delegate (one one). in case, don't have convert single float[,] vector2. note used float[] vector2 converter, instead of float[,] vector2.

multidimensional arrays float[,] bit tricky since don't back upwards linq out of box, bit harder create one-liner mapping.

in other words, @ to the lowest degree need helper method map items of multidimensional array:

public static ienumerable<vector2> convertvectors(float[,] list) { (int row = 0; row < list.getlength(0); row++) { yield homecoming new vector2(list[row, 0], list[row, 1]); } }

and can utilize within array.convertall method:

var converted = array.convertall<float[,], vector2[]>( vertices, ff => convertvectors(ff).toarray());

honestly, prefer linq solution because infer generic parameters automatically:

var r = vertices .select(v => convertvectors(v).toarray()) .toarray();

c# arrays multidimensional-array converter

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -