C#,一维环绕数组

标签 c# arrays

我有一个一维数组,我需要根据每个单元格的相邻单元格对其运行操作。

例如:

要在第一个单元格上运行操作,我需要访问最后一个单元格和第二个单元格。

第二个单元格,我需要访问第一个单元格和第三个单元格。

最后一个单元格,我需要访问第一个单元格和最后一个单元格之前的单元格。

到目前为止我的代码是:

public static int[] firstRule(int[] numberArray)
{
    for (int i = 0; i < numberArray.Length; i++)
    {
        if (numberArray[numberArray.Length - 1 - i] == numberArray[i] + 1 
            && numberArray[i + 1] == numberArray[i] + 1)
        {
            numberArray[i] = numberArray[i] - 1;
        }
    }
    return numberArray;
}

但我的方法的问题是它只适用于第一个单元格,因为它会正确地使用最后一个单元格和第二个单元格,但在那之后,一切都会分崩离析。我不喜欢在没有大量代码的情况下发帖,但我不知道如何跟进。

我正在努力实现以下目标:

这些值是从0到3的数字。如果前面和后面的单元格都是相同的数字,我想把它改成x + 1
例如:假设我有 1 0 1 2 2。我想将 0 更改为 1。因为相邻单元格都是 0。

最佳答案

保持简单并使用变量来计算左右单元格索引。在你的 for 循环中你可以这样做......

var leftCell = i - 1;
if (leftCell < 0)
{
    leftCell = numberArray.Length - 1; // Wrap around to the end...
}

var rightCell = i + 1;
if (rightCell > numberArray.Length - 1)
{
    rightCell = 0;  // Wrap back around to the beginning...
}


// Now you can update your original code to use these computed indices...
if (numberArray[leftCell] == numberArray[i] + 1 
    && numberArray[rightCell] == numberArray[i] + 1)
{
    numberArray[i] = numberArray[i] - 1;
}

关于C#,一维环绕数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616918/

相关文章:

python - 在 python 和 numpy 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?

java - 将二维矩阵对角线与中线交换

c++ - 在 C++ 中搜索二维数组以查看一行/列是否与另一行/列相同

C#:读取串口 - BytesToRead

c# - 如果将结构类型添加到 C# 中,需要更改什么?

c# - 我如何知道 WPF 窗口是否打开

java - 如何从字符串列表中获取 jsonarray

java - 使用反射获取Java数组中的字段 "length"

c# - 客户日期开始时间

c# - 工厂模式,避免不同接口(interface)使用相同的 switch case