2011-03-12 46 views
2

還是新的C#所以要溫柔:)C#列表到數組問題

我有一些代碼讀取CSV文件並將輸出存儲在列表中。由於CSV中的條目數量未確定,因此我使用了List而不是Array。一旦從文件創建了列表,然後我想將它傳遞給Shell排序方法,因爲這是程序的目的。爲此,我首先要將列表轉換爲整數數組。我試過.ToArray方法,但它似乎並沒有爲我工作。我得到一個例外

不能將Implicilty轉換類型String[][]string[]

我知道我在做一些愚蠢的事情,但似乎無法找到什麼...任何幫助,將不勝感激。

//Import DAT file and format it. 
public int[] ImportDat(string path) 
{ 
    List<string[]> loadedData = new List<string[]>(); 

    loadedData.Clear(); 

    try 
    { 
     using (StreamReader readCSV = new StreamReader(path)) 
     { 
      string line; 
      string[] row; 

      while ((line = readCSV.ReadLine()) != null) 
      { 
       row = line.Split(','); 
       loadedData.Add(row); 
      } 
     } 
    } 
    catch 
    { 
     MessageBox.Show("Import Failed. Please check the file is in the same folder as the executable"); 
    } 

    string[] MyArray = loadedData.ToArray(); 

    //temp Array to return a value 
    int[] numbers = new int[5] { 1, 2, 3, 4, 5 }; 

    return numbers; 
} 
+1

將每行只有一個條目(即一列)或多列?如果後者,你想怎麼做?對行進行排序然後對列進行排序,或者將行中的所有條目添加到公共列表中,然後對整個列表進行排序? – GrayWizardx 2011-03-12 21:52:06

回答

1

您的變量loadedData是一個字符串數組列表。調用.ToArray()將返回一個字符串[] [](2維數組),而不是字符串[]。

4

看起來你真的想從你的CSV文件中獲得一維數字列表,但是你現在正在分別對待每一行。如果是這樣的話,那麼使用:的

loadedData.AddRange(row); 

代替:

loadedData.Add(row); 

,並宣佈loadedData爲List<string>。現在,你仍然必須做的詮釋轉換,因爲你的方法返回int.Using LINQ的列表,你可以這樣做:

List<int> results = loadedData.Select(s=> Convert.ToInt32(s)).ToList(); 

你的方法也可以使用LINQ像這樣充分的體現:

public int[] ImportDat(string path) 
{ 
    List<int> result = File.ReadAllLines(path) 
          .Select(line => line.Split(',')) 
          .SelectMany(s => s) 
          .Select(s=> Convert.ToInt32(s)) 
          .ToList(); 
    return result; 
} 
+0

+1,最佳答案,但髒數據/驗證數據將需要Convert.ToInt32調用的包裝。就像HCompston的信息一樣。 – Falcon 2011-03-12 22:03:51

0

您正在將loadedData聲明爲字符串數組列表。你應該只是做

List<string> loadedData = new List<string>(); 
0

的問題是,在列表中的每個項目,是一個字符串數組。 這不是一個字符串列表。 hench,你應該讓你的「MyArray」是一個二維的字符串數組。 換句話說,就是一串字符串數組。所以簡而言之:string [] [] MyArray = loadedData.ToArray();

1

爲什麼你不使用列表並立即轉換數字?

public int[] ImportDat(string path) 
{ 
    List<int> loadedData = new List<int>(); 

    loadedData.Clear(); 

    try 
    { 
     using (StreamReader readCSV = new StreamReader(path)) 
     { 
      string line; 
      string[] row; 

      while ((line = readCSV.ReadLine()) != null) 
      { 
       row = line.Split(','); 
       foreach(var token in row) 
       { 
        loadedData.Add(Convert.ToInt32(token)); 
       } 
      } 
     } 
    } 
    catch 
    { 
     MessageBox.Show("Import Failed. Please check the file is in the same folder as the executable"); 
    } 

    return loadedData.ToArray(); 
} 
0

也許您可以修改此代碼以滿足您的需求?

List<int> numbersList = new List<int>(); 
     string input = "2,4,6,3"; 
     string[] numbersStringArray = input.Split(','); 
     foreach (var numberString in numbersStringArray) 
     { 
      numbersList.Add(Convert.ToInt32(numberString)); 
     } 

     int[] numbersArray = numbersList.ToArray<int>();