簡體   English   中英

從文件中讀取2D矩陣到C#中的2D int數組

[英]Read 2D matrix from file to 2D int array in C#

我從文件中讀取2D文本並將其導入到int數組時遇到問題。 具體來說,我的文本文件如下所示:

2,3,4,5,6

5,2,3,4,5

2,4,6,7,4

2,7,8,5,6

因此,矩陣中的每個單元格均以逗號分隔,每個新行均以新行開頭。

我嘗試了多種方法使其有效,但我做不到! 簡而言之,我希望最后使用一個int[][]int[,]數組。

PS:我可以簡單地將一維矩陣讀取為int[] ,如下所示:

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();
// Read the text file
var text = File.ReadAllLines(@"path\to\file.txt");

// Split on `,`, convert to int32, add to array, add to outer array
var result = text.Select(x => (x.Split(',').Select(Int32.Parse).ToArray())).ToArray();

結果是int[][]

嘗試這個:

String input = File.ReadAllText( @"c:\myfile.txt" );

int i = 0, j = 0;
int[,] res = new int[10, 10];
foreach (var row in input.Split('\n'))
{
   j = 0;
   foreach (var col in row.Trim().Split(' '))
   {
       res[i, j] = int.Parse(col.Trim());
       j++;
   }
   i++;
}

如果這種努力工作,您還可以選擇:

int[][] list = File.ReadAllLines("myfile.txt")
               .Select(l => l.Split(',').Select(i => int.Parse(i)).ToArray())
               .ToArray();

您首先需要將每行的索引添加到第一維,然后將行中的每個“列”添加到第二維。

嘗試以下代碼:

int[][] array = File.ReadAllText(filepath).Split('\n')
                .Select(r => (r.Split(','))
                .Select(c => int.Parse(c)).ToArray()).ToArray();

您正在讀取所有行,但是代碼僅處理一行。 如果您要制作2D整數數組,則需要這樣的內容:

字符串文本= @“ 2,3,4,5,6 5,2,3,4,5 2,4,6,7,4”;

text.Split('\\ n')。Select(line => line.Split(',')。Select(t => int.Parse(t))。ToArray())。ToArray();

(出於測試目的,我已用靜態字符串替換了讀取的文件)

只是為了說明問題,您正在將每行的引用存儲到鋸齒狀數組int [] []或二維數組int [,]中

我建議您在https://msdn.microsoft.com/zh-cn/library/aa288453%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396之前先看一下這里

如果要創建一個鋸齒狀數組很簡單,則第一維將是文件上的行數。 記住這個鋸齒狀的數組在每個位置都有數組

int[][] a = new int[amountOfLinesTxt][];

因為您可以按行獲取數組,所以唯一要做的就是將數組分配給特定位置,例如

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();
a[0] = array

其他行也一樣。

現在,如果您要使用二維數組,則需要從乞討的維度開始進行指定,例如int[,] a = new int[amountOfRowsTxt, amountofColumnsTxt];

那么當您閱讀行時,您需要將項目保存在其中。

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();

for(int i = 0; array.Length; i ++)
{
   a[currentRow, i] = array[i];
}

有這個主意嗎? 當然,只要看一下先前的答案,就有更好的方法使用Linq獲得結果。 希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM