繁体   English   中英

如何从这个以逗号分隔的单行文件制作2D数组?

[英]How can I make a 2D array from this one-line, comma delimited file?

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

http://pastebin.com/8NP7s7N0

我已经尝试过自己查找,但我似乎无法将我的大脑包围在多维数组的概念中,而且我不知道如何将这样的单行文件转换为指定大小的数组。

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

0,0 = 2

0,1 = 2

一直到30,30。

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

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

好吧,首先你需要得到数字......

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];

假设您的文件首先是900个元素,您需要阅读它...

一些东西

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

我会让你弄清楚我的例子中遗漏了什么:P

for(row=0;row<30;row++)
{
    for(col=0;col<30;col++)
    {
       array[row][col] = value;
    }
}

每次都需要移动价值以指向下一件事,但我相信你可以解决这个问题。

编辑添加:如果它是一个地图,它可能更容易将它作为一个数组存储在一起。

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

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

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

对于更高维数的阵列,可能有助于几何思考。 例如,您可以将3D阵列视为空间中的三维点,将4D阵列视为时空中的四维点。

因此,如果您有一个CSV文件,请首先概念化如何将其重新组织为表格。 一旦你有了这个,你有一个非常直接的映射到数组。

这应该是使用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();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM