# Saving Tiles in an irregular grid

I have a grid, which the user can expand as he wishes. Since I don't know how big the grid will end up (and many tiles will stay empty) a two dimensional array (Tile[][] gird) wouldn't work. But I feel like just adding Tiles to a list (List<Tile> grid) can't be the best way, since when I want to get a Tile I have to search for it every time (grid.SingleOrDefault(t => t.x == _x && t.y == _y)). Which is ofcourse not ideal.

Is there a method which e.g. sorts the List<Tile> in a way that it's faster to accesss a given tile?

• When you say "saving", do you mean serializing to a saved game file on disc? Or are you just looking for in-memory representations? May 12 at 12:39
• @DMGregory Just for memory. But at some point also for saving on a disk May 12 at 12:46
• These will likely have two very different solutions: the in memory representation should be optimized for fast random access and ease of expanding. The on-disc representation doesn't need those features, but would benefit from compactness. So you'll probably want to ask about each problem separately. I'd recommend using keywords like "storing" "representing" or "data structure" for the in-memory case, rather than "saving" which suggests the serialize-to-disc case. May 12 at 12:49
• Maybe a dictionary? May 12 at 13:00
• @Mangata remember that big-O notation tells you asymptotic complexity, meaning how the work scales as n gets larger. It does not let you compare the absolute costs for a fixed n. In practice, linearly searching an array can be faster than a dictionary lookup even for n values in the low thousands, depending on the details of the implementation/hardware etc. That's not to say dictionaries are bad, but the trade-off is not quite so "obvious" as the big-O analysis makes it seem. May 12 at 16:44