0

次の 1 行の CSV ファイルを 30x30 の 2D 配列に変換する方法を見つけようとしています。

http://pastebin.com/8NP7s7N0

私はそれを自分で調べてみましたが、多次元配列の概念に頭を悩ませることができないようで、このような1行のファイルを指定されたサイズの配列に変換する方法がわかりません.

印刷すると次のようになる配列を作成できるようにしたい:

0,0 = 2

0,1 = 2

30,30までずっと。

CSV の数字のほとんどは実際には 2 ですが、一部は 1 です。ただし、違いは非常に重要です。ゲームの衝突検出を行おうとしています。この CSV ファイルがマップです。あとは、この配列を作成する方法だけです。残りは私に任せてください。:)

皆様、どうもありがとうございました。良い一日を。

4

5 に答える 5

1

ファイルが最初に900要素であると仮定すると、それを読み込む必要があります。

の線に沿って何か

line = myStreamReader.readLine().Split(',')..次に、John Uの例でvalueは、lineと呼ばれるこの配列の次のインデックスになります。

私の例から欠落しているものを解決させます:P

于 2012-12-12T13:22:04.290 に答える
1

これは、5x5グリッドを使用した完全な例である必要があります。私はそれを試しましたが、期待どおりに機能しているようです:

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 に答える
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 に答える
0
for(row=0;row<30;row++)
{
    for(col=0;col<30;col++)
    {
       array[row][col] = value;
    }
}

毎回次のことを指すように価値を動かす必要がありますが、それは理解できると思います。

追加するために編集:それがマップの場合、そもそも配列として保存する方が簡単かもしれません。

于 2012-12-12T13:15:25.087 に答える
0

多次元配列の概念について質問されたので、ここに配列についてのいくつかの有用な考え方があります。これらはアナロジーであり、視覚化に役立つことを目的としていることに注意してください。

1D配列をアイテムのリストと考えてください(プログラミングの意味ではありません!)。

2D配列をテーブルと考えてください(プログラミングの意味ではありません!)。テーブル(スプレッドシートなど)には行と列があり、配列の各ディメンションはこれらの1つにアクセスします。

高次元の配列の場合、幾何学的に考えると役立つ場合があります。たとえば、3Dアレイは空間内の3次元ポイントと見なすことができ、4Dアレイは時空内の4次元ポイントと考えることができます。

したがって、CSVファイルが1つしかない場合は、これをテーブルとして再構築する方法を概念化することから始めます。それができたら、配列への非常に簡単なマッピングができます。

于 2012-12-12T13:20:38.260 に答える