Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 旋转字符数组_C#_Arrays_Rotation - Fatal编程技术网

C# 旋转字符数组

C# 旋转字符数组,c#,arrays,rotation,C#,Arrays,Rotation,这种方法的替代方法是什么 tmp = c[0]; c[0] = c[1]; c[1] = c[2]; c[2] = c[3]; c[3] = tmp; 要使用泛型左旋转包含4个元素的字符数组,并原地旋转(感谢Jon Skeet的建议): static void Rotate(T[]源) { var temp=源[0]; 数组.Copy(源,1,源,0,源.Length-1); source[source.Length-1]=温度; } 这些应该适用于任何长度至少为2的数组,以及任何数组 如

这种方法的替代方法是什么

 tmp = c[0];
c[0] = c[1];
c[1] = c[2];
c[2] = c[3];
c[3] = tmp;

要使用泛型左旋转包含4个元素的字符数组,并原地旋转(感谢Jon Skeet的建议):

static void Rotate(T[]源)
{
var temp=源[0];
数组.Copy(源,1,源,0,源.Length-1);
source[source.Length-1]=温度;
}
这些应该适用于任何长度至少为2的数组,以及任何数组

如果性能非常关键且阵列总是很小,请使用以下方法:

static void Rotate<T>(T[] source)
{
    var temp = source[0];
    for (int i = 0; i < source.Length - 1; i++)
        source[i] = source[i + 1];
    source[source.Length - 1] = temp;
}
static void Rotate(T[]源)
{
var temp=源[0];
for(int i=0;i

对于大型数组,第一种方法是最快的,但对于4项,此方法几乎与示例方法一样快。

使用泛型和原地旋转(感谢Jon Skeet的建议):

static void Rotate(T[]源)
{
var temp=源[0];
数组.Copy(源,1,源,0,源.Length-1);
source[source.Length-1]=温度;
}
这些应该适用于任何长度至少为2的数组,以及任何数组

如果性能非常关键且阵列总是很小,请使用以下方法:

static void Rotate<T>(T[] source)
{
    var temp = source[0];
    for (int i = 0; i < source.Length - 1; i++)
        source[i] = source[i + 1];
    source[source.Length - 1] = temp;
}
static void Rotate(T[]源)
{
var temp=源[0];
for(int i=0;i

对于大型数组,第一种方法是最快的,但是对于4个项目,这一种几乎与示例方法一样快。

一步完成这项工作

Using System.Linq;

 int[]  ar = { 1,2,3,4,5};
 int k = 1; //
 int[] ar1=  ar.Skip(k)            // Start with the last elements
             .Concat(ar.Take(k)) // Then the first elements
             .ToArray();

输出——2,3,4,5,1

一步完成工作

Using System.Linq;

 int[]  ar = { 1,2,3,4,5};
 int k = 1; //
 int[] ar1=  ar.Skip(k)            // Start with the last elements
             .Concat(ar.Take(k)) // Then the first elements
             .ToArray();

输出--2,3,4,5,1

我不确定您是在要求一种更有效的方法还是一种更简单的键入方法,但我将尝试回答您,假设您想要一种更简单的方法

因此,请尝试:

int temp = c[0]
for(int i = 0; i < c.count; i++)
{
    if (i == (c.count - 1))
    {
        c[i] = temp;
        break;
    }
    c[i] = c[i + 1];
}
int temp=c[0]
对于(int i=0;i
我不确定你是在要求一种更有效的方法还是一种更简单的方式来输入,但我会尝试回答你,假设你想要一种更简单的方式

因此,请尝试:

int temp = c[0]
for(int i = 0; i < c.count; i++)
{
    if (i == (c.count - 1))
    {
        c[i] = temp;
        break;
    }
    c[i] = c[i + 1];
}
int temp=c[0]
对于(int i=0;i
旋转阵列的另一种方法是在访问阵列时旋转索引,即创建虚拟环

int origin = someValue;
int x = c[(i + origin) % c.Length];

旋转数组的另一种方法是在访问数组时旋转索引,即创建虚拟环

int origin = someValue;
int x = c[(i + origin) % c.Length];

在ruby中,旋转数组可以在一行中完成

def array_rotate(arr)
    i, j = arr.length - 1, 0
    arr[j],arr[i], i, j = arr[i], arr[j], i - 1, j + 1 while(j<arr.length/2)
    puts "#{arr}"
end
def阵列旋转(arr)
i、 j=阵列长度-1,0

arr[j],arr[i],i,j=arr[i],arr[j],i-1,j+1,而红宝石旋转阵列中的(j可以在一行中完成

def array_rotate(arr)
    i, j = arr.length - 1, 0
    arr[j],arr[i], i, j = arr[i], arr[j], i - 1, j + 1 while(j<arr.length/2)
    puts "#{arr}"
end
def阵列旋转(arr)
i、 j=阵列长度-1,0

arr[j],arr[i],i,j=arr[i],arr[j],i-1,j+1 while(jAny解释了为什么你没有按照OP的原始代码进行旋转的原因?(Array.Copy可以很好地处理)。我没有想到。我会用另一种方式进行编辑。很好,但比简单的c[0]=c[1]慢两倍;这实际上是程序中的一个问题吗?在不需要的时候不要进行微优化。根据OP的原始代码,有没有任何原因可以解释为什么没有进行适当的旋转?(Array.Copy可以使用)。我没有想到这一点。我将以另一种方式进行编辑。很好,但比简单的c[0]=c[1]慢两倍;这实际上是程序中的一个问题吗?不需要时不要进行微优化。这与此问题不是很相似。因此,您希望将整个数组向左移动,然后将前一个元素添加到末尾。这与此问题不是很相似吗?因此,您希望将整个数组向左移动,然后添加前一个元素t元素结束。我正在寻找一个旋转不移动不工作超过5(即数组长度)或负数我正在寻找一个旋转不移动不工作超过5(即数组长度)或负数好,但我在寻找物理旋转好,但我在寻找物理旋转