2014-11-06 50 views
0

我有兩個數組,我將它們的值進行比較並將索引存儲到列表中。 現在我想要通過另一個數組,獲取索引位置的元素並將它們簡單地複製到一個新數組,但是我得到一個overFlowException。該怎麼辦?通過索引值將數組的元素添加到另一個

for (int i = 0; i < _date.Length; i++) 
{ 
    for (int j = 0; j < _date1.Length; j++) 
    { 
     if (_date[i] == _date1[j]) 
     { 
      same_date = j; 

      s_date.Add(same_date); 
      overlap = s_date.ToArray(); 

     } 
    } 

for (int k = 0; k < overlap.Length; k++) 
{ 
    _store[k] = _data[Convert.ToInt32(overlap[k])]; 
} 
+0

我們在這裏談論的元素有多少?您投射到Int32可能會溢出。 – AlexanderBrevig 2014-11-06 14:28:23

+0

在哪一行你會得到這個異常? – 2014-11-06 14:29:37

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-11-06 14:31:37

回答

0

的問題是,您保存j在重疊變量(_date1數組的索引),但是您使用的重疊變量作爲索引到_date陣列。

這很好,當陣列長度相等時。


更新:

試試這個:

for (int i = 0; i < _date.Length; i++) 
{ 
    for (int j = 0; j < _date1.Length; j++) 
    { 
     if (_date[i] == _date1[j]) 
     { 
      s_date.Add(j); 
     } 
    } 
} 

overlap = s_date.ToArray(); 

for (int k = 0; k < overlap.Length; k++) 
{ 
    // use _data1 instead of _data (k was an index of _data1 array) 
    _store[k] = _date1[Convert.ToInt32(overlap[k])]; 
} 

不要忘記:_Store很多是相同的大小或大於重疊更大。

沒有測試過(還)

+0

你究竟是什麼意思?它應該怎樣纔是正確的?重疊是一個數組 – uzi42tmp 2014-11-06 14:37:58

+0

不起作用。 _date1和_date是字符串數組,_data是double。我檢查日期是否相同,然後我需要從日期是_data數組的值。 – uzi42tmp 2014-11-06 14:44:45

+0

它有相同的長度像重疊(overlap.Length) – uzi42tmp 2014-11-06 14:49:36

0

如果你試試這個方法:

string[] intersetedDates = _date.Intersect(_date1).ToArray(); 

int index = 0; 
foreach (var currentDate in intersetedDates) 
{ 
    _store[index] = _data[Array.IndexOf(_date1, currentDate)]; 
    index++; 
} 

這段代碼的好處是,它消除了環路,與Interset()將提取所有這兩個數組中的值相等,就像你在尋找的那樣。

儘管這段代碼只有一個問題。由於IndexOf()只與第一次出現的值匹配,所以您的日期值必須全部是唯一的。如果你可以確保你的值是唯一的,那麼我相信這會解決你的溢出問題,因爲除了_store之外沒有迭代。

相關問題