首先感谢你花时间看我的问题。
我有一个字母的csv文件,我需要获取数组的最后一个字母并将其移至开头,同时“推送”其他字母
E.G。
- Source-- A,B,C,d,[E]
- Rotated-- 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;
}
为此,我知道并非所有角色都会受到影响,但我不能想到一个循环来移动所有值
答案 0 :(得分:2)
使用Copy
方法:
int last = arr[arr.Length - 1];
Array.Copy(arr, 0, arr, 1, arr.Length - 1);
arr[0] = last;
答案 1 :(得分:1)
您可以使用模%
运算符将数字向右移动:
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 强>
答案 2 :(得分:0)
如果您不想分配新数组,可以使用以下代码:
newValue = Array[Array.Length-1];
for (var i = 0; i < Array.Length; i++)
{
temp = Array[i];
Array[i] = newValue;
newValue = temp;
}