2014-11-06 100 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之外没有迭代。

相关问题