【问题标题】:"rotate" values in array clockwise顺时针“旋转”数组中的值
【发布时间】:2018-05-17 05:32:07
【问题描述】:

首先感谢您花时间看我的问题。

我有一个字母的 csv 文件,我需要获取数组的最后一个字母并将其移动到开头,同时“推动”其他字母

例如

--来源-- a,b,c,d,[e]

--旋转-- e,a,b,c,d

            for (var i = 0; i < Array.Length - 1; i++)
            {
                temp = Array[Array.Length];
                Array[Array.Length] = Array[Array.Length - 1];
                Array[i + 1] = Array[i];
                Array[i] = temp;

            }

为此,我知道并非所有字符都会受到影响,但我想不出一个循环来移动所有值

【问题讨论】:

  • 首先,索引Array.Length 处没有元素。最后一个索引比那个小1。首先考虑逻辑-如果必须将其写下来-然后编写代码来实现该逻辑。首先,将最后一个元素放在一个临时位置。然后从倒数第二个元素移动到第一个元素,将每个元素移动到下一个索引。最后,将 temp 值移动到第一个元素中。所以,你的循环里面有属于外面的代码,你的索引是错误的,你的循环是向后的。
  • 你为什么不使用 list ,那会很容易解决

标签: c# arrays loops


【解决方案1】:

使用Copy方法:

int last = arr[arr.Length - 1];
Array.Copy(arr, 0, arr, 1, arr.Length - 1);
arr[0] = last;

【讨论】:

    【解决方案2】:

    您可以使用模 % 运算符将数字右移:

    int[] arr = { 1, 2, 3, 4, 5 };
    int[] newArr = new int[arr.Length];
    for (int i = 0; i < arr.Length; i++)
    {
        newArr[(i + 1) % newArr.Length] = arr[i];
    }
    

    newArr = {5,1,2,3,4}

    DEMO HERE

    编辑:

    或者您可以创建一个方法来移动初始数组中的数字,而无需创建新数组。方法rightShiftArray 有两个参数,初始数组arr 和要执行的班次数(shift):

    public void rightShiftArray(ref int[] arr, int shift)
    {
        for (int i = 0; i < shift; i++)
        {
            int temp;
            for (int j = 0; j < arr.Length - 1; j++)
            {
                temp = arr[j];
                arr[j] = arr[arr.Length - 1];
                arr[arr.Length - 1] = temp;
            }
        }
    }
    

    例如:

    int[] arr = { 1, 2, 3, 4, 5 };
    
    rightShiftArray(ref arr, 2);
    

    上面的代码将初始数组arr 中的数字向右移动两次,并为您提供以下输出:

    arr = { 4, 5, 1, 2, 3};

    DEMO HERE

    【讨论】:

      【解决方案3】:

      如果你不想分配新数组,你可以使用这个代码:

      newValue = Array[Array.Length-1];
      for (var i = 0; i < Array.Length; i++)
      {
        temp = Array[i];
        Array[i] = newValue;
        newValue = temp;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-16
        • 2012-05-09
        • 1970-01-01
        • 2018-03-26
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        相关资源
        最近更新 更多