2

这很可能非常简单,但我似乎无法弄清楚:)

我有2个int数组。我想确保一个值在两个数组中都使用某种形式的代码契约。如果值不是两个数组我不想继续

这可以做到吗?我在想这样的事情,但似乎无法让它发挥作用

Contract.Requires(g[variable ] == y[variable]) 

该值必须在两个数组中的位置相同

这就是我现在所拥有的

 private static int FirstCut(int[] g, int[] h)
        {
            int x = 0;

            Contract.Requires(g.Length > 0);            
            Contract.Requires(g.Length == h.Length); //skal være lige lange

            while (g[x] != h[x])
            {
                x++;
            } 
            return x;
        }

问候

比尔格

4

4 回答 4

1
Contract.Requires(g[variable ] == g[variable]) 

好吧,这只是一个数组,即使是两个,也需要在相同的索引处找到它们,你没有说这是一个要求。在我看来,条件应该是:

x.Contains(variable) && y.Contains(variable)

假设xy属于 类型int[]

此外,我对 C# 中的代码合同或在您的方法顶部执行两个 O(n) 操作的性能影响一无所知。

于 2012-04-11T17:58:29.730 回答
0

如果值应该在同一个索引上,假设gand yareint[]variableis int,那不是这样的:

Contract.Requires(g.Contains(variable) && g.IndexOf(variable) == y.IndexOf(variable))

免责声明:完全未经测试,也许我不理解这个问题

于 2012-04-11T18:13:09.797 回答
0
for(int i = 0; i < firstArray.Length && i < secondArray.Length; i++)
{
  if(firstArray[i] == mySearchValue &&  secondArray[i] == mySearchValue)
  {
    //whatever you want to do

    break; //you can remove this if you don't want to stop the loop.
  }
}
于 2012-04-11T18:13:45.623 回答
0

在我大四的时候玩过代码合同,这就是我考虑解决问题的方式。它看起来比一些发布的解决方案更干净。

public static int FirstCut(int[] g, int[] h)
{
    Contract.Requires(h.Length == g.Length);
    Contract.Requires(Contract.Exists(0, g.Length, x => g[x] == h[x]));

    //Do whatever knowing that 2 values at index x in the arrays are the same
}
于 2012-04-11T18:50:22.630 回答