2012-12-12 59 views
0

我想弄清楚如何將以下單行CSV文件轉換爲30x30二維數組。如何從這個單行,逗號分隔的文件製作二維數組?

http://pastebin.com/8NP7s7N0

我試圖尋找它自己,但我似乎無法環繞多維數組的概念,我的大腦,我不知道如何把一個在線文件像這樣成一個指定大小的數組。

我希望能夠做出一個數組,看起來像這樣打印時:

0,0 = 2

0,1 = 2

一路到30,30。

CSV中的大部分數字確實是2,但有些是1。不同點是非常重要的。我正在嘗試爲遊戲進行碰撞檢測,並且此CSV文件是地圖。我只剩下剩下的就是如何創建這個數組 - 把剩下的留給我。 :)

非常感謝大家,祝你有美好的一天。

+1

[你有什麼試過](http://whathaveyoutried.com)?請發佈您的當前代碼並解釋您卡住的位置。 – Oded

+0

我還沒有嘗試過任何東西,因爲我無法將這個概念包裹起來。我希望有人能通過向我展示正確的方式來幫助我。這是錯誤的地方嗎? –

+0

我們希望看到努力。你覺得這個概念有什麼困難? – Oded

回答

0

這應該是使用5×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(); 
     } 
    } 
} 
+0

非常感謝!太棒了。現在只需將其實施到我的程序中。 :) –

+0

很高興幫助。 – Belogix

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

價值需要移動指向下一件事每次,但我相信你可以弄清楚。

編輯添加:如果它是一張地圖,它可能更容易將其作爲數組存儲在首位。

+0

也可以通過array [row,col]來定義它,如果這對你更可讀) – Sayse

+0

該文件是由名爲Realm Factory的拼貼編輯器自動創建的。我正在使用這些圖塊併爲它們分配值,以便我可以爲它們添加碰撞。 –

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

'[row * col]'? – Rawling

+0

呃...是的,這是應該選擇相應的項目在數字的平面列表(假設他們排在行,列... –

+0

不是'(row * COLS)+ col'? – Rawling

0

既然你問到多維數組的概念,這裏有一些有用的思考數組的方法。請注意,這些是類比,旨在幫助您將它們可視化。

想象一個1D數組作爲項目列表(不在編程意義上的列表!)。

想象一個2D數組作爲表(再次,不在編程意義上!)。在表格中(如電子表格),您有行和列,數組中的每個維都可以訪問其中的一個維。

對於更高維的陣列,它可能有助於從幾何角度進行思考。例如,您可以將3D陣列視爲空間中的三維點,將4D陣列視爲時空中的四維點。

所以,如果你有一個單一的CSV文件,首先概念化將如何重新組織爲一個表。一旦你有了,你有一個非常直接的映射到數組。

1

假設你的文件是900元首先你需要在閱讀它..

東西沿着

line = myStreamReader.readLine().Split(',')行..然後在約翰將U例如value將這個數組稱爲線在未來指數

我會讓你的工作什麼從我的例子裏缺了:P

相關問題