获得三维数组差异

时间:2015-09-23 20:22:39

标签: c# .net arrays

我正在尝试编写一个简单的方法来获得两个三维数组的比较之间的所有差异:

public static Dictionary<Int32, KeyValuePair<Int32, Double>> GetArrayDifferences3D(
        Dictionary<Int32, KeyValuePair<Int32, Double>> Array1, 
        Dictionary<Int32, KeyValuePair<Int32, Double>> Array2)
{
    Dictionary<Int32, KeyValuePair<Int32, Double>> ArrayDifferences = new Dictionary<Int32, KeyValuePair<Int32, Double>>();

    // comparison here
    return ArrayDifferences;
}

更新

我在Array1中有下一个数据:

Int32 Int32 Double
1     2     10.50
2     2     5.00
1     1     2.00

在Array2中:

Int32 Int32 Double
5     2     1.00
3     2     0.50
1     1     5.00

我需要匹配Int32类型的所有值,如果它们相等,则相互减去Double并返回它们的差异。例如:

Int32 Int32 Double
1     2     -10.50
2     2     -5.00
1     1      3.00 //(Match Subtract)
5     2      1.00
3     2      0.50

1 个答案:

答案 0 :(得分:4)

在这里得到正确的答案有一个非常重大的速度突破,你建议的数据结构不能存储你建议的数据。 Dictionary必须具有唯一键,但您的数据不包含第一个Int32的唯一值。另一个问题是你谈的是数组,这是一种非常有序的集合类型,但是Dictionary没有维护顺序。

我会随意修复第一个问题,因为它必须修复并避免解决第二个问题,因为您没有指明订购要求并且保持代码快速。您需要INTERACTIVE来存储数据。

您现在正在比较。为结果生成键集的一种简单方法是使用HashSet.Union()方法。像这样:

Dictionary<Tuple<int, int>, double>

该算法为O(n),无法满足O(n)存储要求。