为什么这种反向阵列方法不起作用?

时间:2018-01-23 13:39:41

标签: c# arrays reverse

我正在尝试制作一个反转数组的方法,我不知道它为什么不起作用?

当我说int[] arr = array时,我想这样做,所以它不会受到影响所以我可以使用第二个for循环的元素,它应该有元素{1,2,3,4,5,6}但是当我用

for (int i=array.Length-1;i>array.Length/2;i--)
{
    array[i] = arr[array.Length - 1 - i];
}

在这种情况下,我有6个元素,因此array.Length是6,因为我从array.Length-1开始,它必须从最后一个元素开始,它必须是array[5]=arr[6-1-5],必须是{{1} }和array[5]=arr[0]是1,但我认为它是6,为什么?

以下是完整的代码:

arr[0]

2 个答案:

答案 0 :(得分:7)

您的撤消方法无效:而不是在索引iarray.Length-1 - i交换元素,您的代码复制数组的尾部在最初的一个,有效地"折叠"数组到自身。

您需要删除第二个循环,并使用swap替换赋值:创建一个临时变量,存储array[i],复制array[array.Length-1 - i],然后将临时写入其中。

答案 1 :(得分:6)

我无法自拔,但开始写一段代码试图解决它。

    int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    arr = Reverse(arr).ToArray();

这是实现这一目标的更短途径。

    public IEnumerable<int> Reverse(int[] arr)
    {
        for (int i = arr.Length-1; i >= 0; i--)
        {
            yield return arr[i];
        }
    }