使用 C# 在数组中移动元素
本文关键字:移动 元素 数组 使用 | 更新日期: 2023-09-27 18:36:26
有没有办法在数组内移动项目?例如:
int[] myArray = {1,2,3,4};
第二个元素成为最后一个元素:
int[] myArray = {1,3,4,2};
PS:不,这不是家庭作业。我可以想到至少一个解决方案,但它需要相当困难的实施:
- 首先,我们将第二个元素保存到 Int
- 然后我们从数组中删除这个元素
- 然后我们在数组的最后添加新元素
还有其他(阅读 - 更简单)的方法吗?
使用数组没有简单的方法可以做到这一点。您必须遍历数组,将每个元素移动到正在移动的索引,然后在末尾重新插入该元素。您始终可以使用List<int>
来执行此操作。
List<int> list = myArray.ToList();
int value = list[1];
list.RemoveAt(1);
list.Add(value);
myArray = list.ToArray();
使用 List<int>
.数组不是为了所有元素的这种运动。
或者尝试交换最后一个和选定的元素,但它会弄乱顺序。
如果数组始终是固定大小,则:
myArray = new int[4] { myArray[0], myArray[2], myArray[3], myArray[1] };
但是,如果它的大小是可变的,那么它就会变得更加棘手,最好先在列表中完成
int lastElement = 0;
List<int> newArray = new List<int>();
for ( int index=0; index<myArray.Length; index++)
{
if ( index == 1 ) lastElement = myArray[index];
else newArray.Add(myArray[index]);
}
newArray.Add(lastElement);
myArray = newArray.ToArray();
myArray = new List<int>(myArray.Where((x, i) => (i != 1)))
{ myArray[1] }.ToArray();
对于此实例,您可以使用 XOR 交换:
[Test]
public void TestSwap()
{
int[] myArray = { 1, 2, 3, 4 };
Console.WriteLine(string.Join(", ", myArray));
Swap(myArray, 1, 2);
Swap(myArray, 2, 3);
Console.WriteLine(string.Join(", ", myArray));
}
static void Swap(int[] vals, int x, int y)
{
vals[x] = vals[x] ^ vals[y];
vals[y] = vals[y] ^ vals[x];
vals[x] = vals[x] ^ vals[y];
}