2011-02-25 73 views
0
 public List<string[]> parseCSV(string path) 
    { 
     List<string[]> parsedData = new List<string[]>(); 

     try 
     { 
      using (StreamReader readFile = new StreamReader(path)) 
      { 
       string line; 
       string[] row; 
       while ((line = readFile.ReadLine()) != null) 
       { 
        row = line.Split(','); 
        parsedData.Add(row); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
     } 

     return parsedData; 
    } 

我想使用此代碼來解析CSV,並返回一個填充數組的列表。我的問題是如何遍歷列表中的數組,如果他們是未知的大小?迭代通過C#中的數組填充的列表中的代碼

例如:

for (int a=0; a<=CSVList(firstindex).Length;a++) 
     for (int a=0; a<=CSVList(secondindex).Length;a++) 

像這樣的閱讀CSVList在它的第一個索引,然後第一個數組元素......我想我真的很憋屈的語法。

謝謝

回答

4

您可以使用LINQ變平了這一點,如果你只是想每個值寫出來:

var results = parseCSV(path); 

foreach(var str in results.SelectMany(i => i)) 
{ 
    Console.WriteLine(str); 
} 

否則,您可以在兩個環路做到這一點:

var results = parseCSV(path); 
foreach(var arr in results) 
{ 
    for (int i=0;i<arr.Length;++i) // Loop through array 
    { 
     string value = arr[i]; // This is the array element... 
    } 
} 
1

如果它只是一個List<string[]>值,那麼最簡單的語法是嵌套的foreach循環。

foreach (var arrayElement in CSVList) { 
    foreach (var current in arrayElement) { 
    ... 
    } 
} 
1

你一定會覺得很使用foreach循環,而不是傳統的for循環更好。

隨着foreach您的迭代寫的是:

foreach(string[] array in parsedData) { 
    foreach(string element in array) { 
     Console.WriteLine(element); 
    } 
} 

隨着foreach你剛纔說「遍歷所有元素」,你不用擔心多少 elments有。

0

每個數組都會有一個大小,因爲.NET中的所有數組都繼承自System.Array。只需引用基於列表索引的數組,然後你可以簡單地迭代到MyArrayOfInterest.count-1

+0

對,我的問題是更多的C#的語法和迭代通過列表的數組 – Joel 2011-02-25 20:42:20