0

我试图弄清楚如何将以下单行 CSV 文件转换为 30x30 2D 数组。

http://pastebin.com/8NP7s7N0

我试过自己查,但我似乎无法将我的大脑包裹在多维数组的概念上,我不知道如何将这样的单行文件变成指定大小的数组.

我希望能够制作一个打印时看起来像这样的数组:

0,0 = 2

0,1 = 2

一直到30,30。

CSV 中的大多数数字确实是 2,但有些是 1。区别是非常重要的。我正在尝试为游戏进行碰撞检测,这个 CSV 文件就是地图。我只需要如何创建这个数组——剩下的交给我。:)

非常感谢大家,祝大家有个愉快的一天。

4

5 回答 5

1

嗯,首先你需要得到数字......

var numbers = Read_File_As_String().Split(new char[',']).Select(n => int.Parse(n)).ToList();

然后,您需要构建您的阵列

const int ROWS = 30;
const int COLS = 30;

var result = new int[ROWS, COLS];

for (int row = 0; row < ROWS; row++)
    for (int col = 0; col < COLS; col++)
        result[row, col] = numbers[(row * COLS) + col];
于 2012-12-12T13:16:47.333 回答
1

假设您的文件首先包含 900 个元素,您需要将其读入..

类似的东西

line = myStreamReader.readLine().Split(',').. 然后在 John U 的示例中,value将是该数组中称为 line 的下一个索引

我会让你找出我的例子中缺少的东西:P

于 2012-12-12T13:22:04.290 回答
1

这应该是一个使用 5 x 5 网格的完整示例。我已经尝试过了,似乎可以按预期工作:

namespace ConsoleApplication1
{
    using System;

    class Program
    {
        const int MapRows = 5;
        const int MapColumns = 5;

        static void Main(string[] args)
        {
            // Create map and the raw data (from file)
            var map = new int[MapRows, MapColumns];
            string rawMapData = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25";
            string[] splitData = rawMapData.Split(',');
            int index = 0;

            // Loop through data
            for (int row = 0; row < MapRows; row++)
            {
                for (int column = 0; column < MapColumns; column++)
                {
                    // Store in map and show some debug
                    map[row, column] = int.Parse(splitData[index++]);
                    Console.WriteLine(string.Format("{0},{1} = {2}", row, column, map[row, column]));
                }
            }

            // Wait for user to read
            Console.ReadKey();
        }
    }
}
于 2012-12-12T13:30:53.650 回答
0
for(row=0;row<30;row++)
{
    for(col=0;col<30;col++)
    {
       array[row][col] = value;
    }
}

每次都需要移动价值以指向下一件事,但我相信你可以弄清楚这一点。

编辑添加:如果它是一张地图,那么首先将它存储为一个数组可能会更容易。

于 2012-12-12T13:15:25.087 回答
0

既然您询问了多维数组的概念,这里有一些有用的思考数组的方法。请注意,这些是类比,旨在帮助您将它们形象化。

将一维数组视为项目列表(不是列表的编程意义!)。

将 2D 数组视为一个表(同样,不是编程意义上的!)。在表格(如电子表格)中,您有行和列,并且数组中的每个维度都访问其中一个。

对于更高维的数组,从几何角度思考可能会有所帮助。例如,您可以将 3D 数组视为空间中的 3 维点,将 4D 数组视为时空中的 4 维点。

因此,如果您有一个 CSV 文件,请从概念化如何将其重组为表格开始。一旦你有了它,你就有了一个非常直接的到数组的映射。

于 2012-12-12T13:20:38.260 回答