• Advertisement
Sign in to follow this  

store values from string in an array

This topic is 1684 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have a string:

 

       map = ("1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1" +
                   "1, 1, 1, 1, 1");
 
That I want to store in an array somehow, or be able to store the values of the string in 3 seperate arrays. With these arrays, I'm going to create a map of blocks. I don't know how to set these values though. The x array will be the number of rows, so in this case it will be 5. Eventually I will have bigger maps so I'd need to somehow read the number of lines in the string. 
 
Would it make more sense to store each value in a 3 dimensional array? If I could do that, each value will be something like (3, 1, 2) for the third row and second column with the value 1? How would I do this?

Share this post


Link to post
Share on other sites
Advertisement
Rather than first creating a string and then parsing the contents to create an array, it would probably make more sense to create the array first and generate the string from the array (for example with String.Join()).

Share this post


Link to post
Share on other sites

Store in a 2D array like this:

 

int[,] map = new int[,]
{
   { 1, 0, 0, 0, 0},
   { 0, 0, 0, 3, 0},
   { 0, 2, 0, 0, 0},
   { 0, 0, 0, 0, 0},
   { 0, 4, 0, 0, 6},
}

 

you can access numbers like so:

 

map[y,x]
 
//E.g
int num1 = map[0,0];
int num2 = map[2,1];
int num3 = map[1,3];
int num4 = map[4,1];
int num6 = map[4,4];

Share this post


Link to post
Share on other sites

I don't know why I never even considered that -.- So how would I get the position of the number in a certain row? Getting the row would probably be easy if there's some kind of method you can use.

Share this post


Link to post
Share on other sites
const size_t mapStride = 5;
 
size_t calcIndex(size_t row, size_t column) {
  return (row * mapStride) + column;
}
 
size_t calcRow(size_t index) {
  return index / mapStride;
}
 
size_t calcColumn(size_t index) {
  return index % mapStride;
}

Share this post


Link to post
Share on other sites

Alright so because I'm always going to know the dimensions of x and z, I've chosen to hard code them into the for loop

 

for(int x = 0; x < 5; x++)

{

    mapCoordsX[x] = x;

}

 

Same with mapCoordsZ. So the x and z are fine for now, until I want to make a bigger map.

 

Inside my for loop, I'm creating cubes with a position at each mapCoord like so:

 

new Vector3(mapCoords[x], (y goes here?), mapCoords[z])

 

This creates a nice 5x5 grid of cubes for me. Now if the cube at position (0, 0) has a height of 2 in my map array... {2, 0, 0, 0, 0}...how would I set the y position of this cube?

 

#region MAP
            float[,] map = 
            {
                  {1, 0, 0, 0, 0},
                  {0, 0, 0, 0, 0},
                  {0, 0, 0, 0, 0}, 
                  {0, 0, 0, 0, 0}, 
                  {0, 0, 0, 0, 0}
            };

            #endregion MAP

            for (int x = 0; x < 5; x++)
            {
                mapX[x] = x;
            }

            for (int z = 0; z < 5; z++)
            {
                mapZ[z] = z;
            }

            for (int y = 0; y < map.Length; y++)
            {
                mapY[y] = 0;
            }

            for (int x = 0; x < 5; x++)
            {
                for (int z = 0; z < 5; z++)
                {
                    for (int y = 0; y < 5; y++)
                    {
                        cubes.Add(new Vector3(mapX[x], mapY[y], mapZ[z]), Matrix.Identity, grass);
                    }
                }
            }

There's the full code of what I'm doing. It's also creating 125 cubes instead of 25 but I'll fix that later :P

Edited by burnt_casadilla

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement