【问题标题】:Put elements of an array to another by index values通过索引值将一个数组的元素放到另一个数组中
【发布时间】:2014-11-06 14:25:51
【问题描述】:

我有两个数组,我在其中比较值并将索引存储到列表中。 现在我想遍历另一个数组,获取索引位置的元素并将它们简单地复制到一个新数组中,但我得到了一个 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])];
}

【问题讨论】:

  • 我们在这里讨论了多少个元素?您对 Int32 的强制转换可能会溢出。
  • 你在哪一行得到这个异常?
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 当我忽略它时,他告诉我他不能将 double 转换为 int。那是大约 10 个元素,但可能会有所不同。我获取重叠值的索引的数组大约有 900。我获取大约 10 个索引并希望从另一个数组(具有相同的长度 - 大约 900)复制这些索引处的值 - 他在最后一个“for " 循环
  • 为什么要在if 语句中分配overlap?我想你会在循环之外做这些?

标签: c# arrays copy


【解决方案1】:

问题是,您将 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 的大小应与重叠大小相同或更大。

尚未测试(还)

【讨论】:

  • 你到底是什么意思?应该如何正确?重叠是一个数组
  • 不起作用。 _date1 和 _date 是字符串数组,_data 是双精度数组。我检查日期是否相同,然后我需要 _data 数组中日期所在位置的值。
  • 它的长度和重叠一样(overlap.Length)
  • 我想我需要更多的上下文。我误读了 _data1 和 _date1。您应该考虑使用更具描述性的变量名称..
  • 对此感到抱歉:/ 一切正常,但最后一个 for 循环,我不明白为什么。也许是转换方法?
【解决方案2】:

如果你尝试这种方法会怎样:

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 之外没有任何迭代。

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2015-02-11
    • 2021-11-26
    • 2021-11-24
    • 2021-12-08
    • 2018-12-24
    • 2012-01-05
    • 2013-11-13
    相关资源
    最近更新 更多