【问题标题】:How to send an item in an array to the back and move the other items forward? C#如何将数组中的一个项目发送到后面并将其他项目向前移动? C#
【发布时间】:2014-08-10 15:33:40
【问题描述】:

在不转换为列表的情况下,如何将特定索引移到后面,而将其他索引移到后面?

例如,如果您有数组 xs:20、30、40、50、60。 并且您希望 xs 更改为:20, 40, 50, 60, 30

有什么想法吗?

我使用的代码不起作用:

 if (indx >= 0 && indx < xs.Length)
 {
    for (int i = indx; i < xs.Length-1; i++)
    {
        int bb = xs[indx];                    
        xs[i +1] = xs[i];
        xs[xs.Length - 1] = bb;
    }     
 }

【问题讨论】:

  • 你能告诉我们一些你试过的代码吗?
  • 这个作业是否带有数组约束,或者我们可以提出明智的建议吗?
  • 您可以简单地使用RemoveAtInsert 方法。
  • 这不是家庭作业,所以不要评论。

标签: c# arrays int


【解决方案1】:

我想这就是你要问的。创建这个方法:

private static int[] SwapItem(int[] arr, int index)
{
    return arr.Where(i => i != arr[index]).Concat(new[] { arr[index] }).ToArray();
}

然后在你的代码中像这样使用它:

int[] original = { 1, 2, 3, 4, 5, 6 };
var newArray = SwapItem(original, 1);

本示例中使用索引 1 的输出将是:

{ 1, 3, 4, 5, 6, 2 }

【讨论】:

    【解决方案2】:

    当你交换时,你需要使用正确的位置:

    for (int i = indx; i < xs.Length-1; i++)
    {
        int tmp = xs[i];                    
        xs[i]   = xs[i+1];
        xs[i+1] = tmp;
    }
    

    【讨论】:

    • 不需要对每个数组元素进行交换。在循环之前保存 xs[indx] 值就足够了,将循环中的所有后续值随机排列,然后将保存的值存储在数组的末尾。
    • @HABO - 是的,一个小小的改进。 OP 最初将这两个版本混合在一起。这是一个简单的版本,不是最快的。不过它会足够快。
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多