2017-06-04 30 views
1

我希望創建一個從控制檯讀取輸入並填充它的方法中的輸入的類型,例如填充的矩陣:如何創建一個方法,用於在不知道

ABBD

EBBB

IJBB

第一行讀取尺寸,其餘的是矩陣中的輸入(沒有空行,我只是不能粘貼)。 我寫了這個:

static void Main(string[] args) 
    { 
     var input = Console.ReadLine(); 
     char[,] matrix = ReadAndFillMatrix(input); 
    } 

    private static char[,] ReadAndFillMatrix(string input) 
     { 
      var size=input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
.Select(int.Parse) 
.ToArray(); 
      var rows = size[0]; 
      var cols = size[1]; 
      var matrix = new char[rows, cols]; 
      for (int i = 0; i < rows; i++) 
      { 
       var line = Console.ReadLine() 
       .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
       .Select(char.Parse) 
       .ToArray(); 
       for (int j = 0; j < cols; j++) 
       { 
        matrix[i, j] = line[j]; 
       } 
      } 

      return matrix; 
     } 

到目前爲止好,但我該怎麼辦時,矩陣不是由字符,但例如整數?

問題:我是否需要爲每種矩陣類型創建不同的方法,或者是否存在一些我錯過的東西?

PS:我希望能夠用它在多個地方爲不同的矩陣不僅僅是一個

+0

如何使用泛型?比如說,一個var? – jitendragarg

回答

3

你非常接近!只需使用Char.IsDigit(或int.TryParse)來測試您讀出的每個部分,這樣您就會知道;當然,您需要爲每個類型charint創建一個不同的矩陣數組,例如,但這不應該太繁重。


編輯

按照由@kokosaish這個答案提出的意見,我已經更新了以下內容:

void Main() 
{ 
    var stringMatrix = ReadAndFillMatrix<string>(s => s); 
    var intMatrix = ReadAndFillMatrix<int>(int.Parse); 
    var doubleMatrix = ReadAndFillMatrix<double>(double.Parse); 
} 

private static T[,] ReadAndFillMatrix<T>(Func<string,T> sectionParser) 
{ 
    var readAndSplit = 
     new Func<string[]>(
      () => 
      { 
       return 
       Console.ReadLine() 
       .Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries) 
       .ToArray(); 
      }); 

    var size = readAndSplit(); 
    var rows = int.Parse(size[0]); 
    var cols = int.Parse(size[1]); 

    var matrix = new T[rows, cols]; 
    for (var i = 0; i < rows; i++) 
    { 
     var line = readAndSplit(); 
     for (var j = 0; j < cols; j++) 
     { 
      matrix[i,j] = sectionParser(line[j]); 
     } 
    } 
    return matrix; 
} 

這是遠從生產準備代碼,根據您的需要爲解析失敗時添加錯誤處理等,但這應該告訴你如何指定你想要的類型。

+0

但我需要指定我在方法中返回的類型。即使我發現矩陣是由整型而不是字符組成的,我已經聲明方法是char [,],這意味着我應該只返回char [ ,],不是嗎? – kokosaish

+1

@kokosaish我已經更新了答案,現在這將允許您創建任何類型的矩陣,只要您可以對該特定類型執行解析操作。 – Clint

0

嘗試創建類型爲var的鋸齒狀數組。檢查這個問題的解決方案。

Storing an array of a different type into a jagged array

在這種陣列,可以每行存儲爲一個新的數組。這將在運行時發生,因此您可以使用TypeOf來查找確切的數據類型。或者你可以把它全部保存爲var。

相關問題