0

这是为了学校作业。

我和我的团队合作伙伴想知道是否可以将一个值移动到同一个数组中的另一个索引?

4

5 回答 5

4

当然。

var temp = array[i];
array[i] = array[j];
array[j] = temp;
于 2013-02-09T19:54:20.103 回答
1

当然可以;

var array= new int[]{1, 2, 3};
foreach (var i in array)
{
    Console.WriteLine (i);
}

array[1] = array[2];

foreach (var j in array)
{
    Console.WriteLine (j);
}

结果将是;

1 2 3
1 3 3

这是一个DEMO.

但是,当然,这会将值从一个值处理到另一个值。旧索引值移动到新索引值。如果你想使用改变他们的值,你可以使用tempDaniel's answer这样的值。

于 2013-02-09T20:01:17.367 回答
1

在 C# 中移动一个值与将一个橙子从冰箱中移动到餐桌上是非常不同的,因为当您将橙子从一个地方移动到另一个地方时,旧的地方不再包含橙子。

另一方面,在数组中移动一个项目,本质上是一种复制*的行为,所以你可以这样写:

myArray[newIndex] = myArray[oldIndex];

现在旧索引中的项目被移动到它的新索引中。旧索引也包含该项目。如果您不希望这种情况发生,则需要通过将其替换为其他内容来明确“删除”该项目。在引用对象数组中,您将其替换为null

myArray[oldIndex] = null;

在值对象数组中,您将其替换为您指定为“无”的某个特殊值,或者null如果您的值对象可以为空,则替换为该值。


*您复制的内容取决于数组元素的类型:在值类型数组中,项目本身会被复制;在引用类型数组中,引用被复制。继续橙子类比,当橙子是引用类型时,橙子数组是定义数组中所有橙子位置的便利贴列表。您没有将橙色移动到阵列中,而是放置了一张便利贴,上面写着“从右边数第三个橙色”,然后将橙色留在原处。复制参考对象只是复制其便利贴。

于 2013-02-09T20:01:41.890 回答
0

复制很简单

array[Index+1] = array[Index]

交换是

var tmp = array[Index + 1];
array[Index+1] = arry[Index];
array[Index] = tmp;

移动得好取决于你想用什么来替换移动的项目,以表明它现在是空的,比如

array[Index+1] = array[Index];
array[Index] = -1;
于 2013-02-09T20:05:59.553 回答
0

将阵列想象成堆垛机托盘。东西可以在里面,你可以移动东西,但是把东西放在一个抽屉里或另一个抽屉里不会影响其他东西的顺序。

您可以使用列表而不是使用数组

        List<int> myList = new List<int>();
        myList.Add(1);
        myList.Add(2);
        myList.Add(3);
        myList.Add(4);
        myList.Add(5);

会给你1,2,3,4,5。

然后打电话

    int temp = myList[1];
    myList.RemoveAt(1);
    myList.Insert(3, temp);

会给你1,3,4,2,5

于 2013-02-09T20:09:14.277 回答