2015-03-02 20 views
0

我遇到了一個問題,我沒有比較正確的數據點,因爲我的測試只有一部分正在迭代。如何在C#中正確地增加多個循環#

  //for each row from csv 
      foreach (DataRow dataRow in csvDataTable.Rows) 
      { 
       //for each cell from csv row 
       foreach (var csvItem in dataRow.ItemArray) 
       { 
        //for each audiogram 
        for (int i = 0; i < audioGramData.Count(); i++) 
        { 
         //for each stimulus frequency 
         for (int e = 0; e < audioGramData.Count(); e++) 
         { 
          string stimLevel = audioGramData[i].ToList()[e]["StimulusLevel"].ToString(); 

          if (csvItem.ToString() != stimLevel) 
          { 
           return false; 
          } 
         } 
        } 
       } 
      } 
      return true; 

測試的第一遍正確比較了csv文件中的第一個單元格與JSON對象的適當字段。但是,在第二遍中,只有stimLevel變量增加。

如果有3行的CSV文件,CSV文件3列,並在JSON對象3個stimLevels,測試的流動應該是這樣的:

((比較第一csvItem到第一stimLevel

csvItem ++

stimLevel ++)X3

的DataRow ++

聽力圖++)X3

的audioGramData 2D陣列是由第一含JSON數據錶轉換成JSON對象像這樣創建的:

 sqlAdapter.Fill(sqlDataTable); 
     Conn.Close(); 
     JObject someObject = JObject.Parse(sqlDataTable.Rows[0].ItemArray[0].ToString()); 

     var audioGramData = (JArray)someObject["HIMSAAudiometricStandard"]["ToneThresholdAudiogram"]; 
+0

你從哪裏得到'audioGramData'? – 2015-03-02 23:37:36

+0

通過首先將包含JSON的dataTable轉換爲JSON對象來創建audioGramData 2D數組。 (代碼添加到問題)。 – MattJ 2015-03-02 23:47:03

+1

這是一個使用linq可以完全消除大量多餘的ToList()調用的情況......沒有足夠的示例數據顯示這裏知道數據結構,但是當我看到ToList()[ 1] .ToList()[0] .ToList()[e]'告訴我,我們深入一個循環內部,但是對數據的操作超出了循環的範圍。 – Claies 2015-03-03 00:07:32

回答

0

這通過擺脫兩個額外的4個循環的解決,並且迭代i和E各自的外的每個循環。

int i =0; 
int e =0;    

      //for each row from csv 
      foreach (DataRow dataRow in csvDataTable.Rows) 
      { 
       //for each cell from csv row 
       foreach (var item in dataRow.ItemArray) 
       { 
        string stimlevel = audioGramData[i].ToList()[1].ToList()[0].ToList()[e]["StimulusLevel"].ToString(); 
        stimlevel = stimlevel.Remove(stimlevel.Length -2); 
        if (item.ToString() != stimlevel) 
         { 
          return false; 
         } 
        e++; 
       } 
       i++; 
      } 
      return true; 
相關問題