以相反的顺序将数组值传递给另一个数组

时间:2018-12-31 22:05:51

标签: c# array-reverse

我想将int a []值传递给int b []。但我面临混乱。谁能纠正我。 b的输出为0,0,0,45,4,2,1。应该是7,6,5,4,45,2,1。

static void Main()
{
    int[] a = new int[] { 1, 2, 45, 4, 5, 6, 7 };
    int[] b = new int[7];
    int temp = 0;

    for (int i = 0; i <= a.Length - 1; i++)
    {
        b[(b.Length - i) - 1] = a[i];

        Console.WriteLine(b[i]);
    }     
}   

3 个答案:

答案 0 :(得分:7)

这里的问题是,您要插入从b的最后一个索引开始的项目,但是要从第一个索引开始输出它们。复制项目的代码是正确的,但是您需要调整一行以将结果输出到控制台,以使用刚插入项目时使用的相同索引在b中显示项目。

请注意,您还可以进行其他一些改进,例如对a使用数组初始化器语法,使用a.Length实例化b而不是硬编码数字,然后删除未使用的temp变量,将i < a.Length用于for条件(而不是i <= Length - 1,它对每次迭代进行减法运算),并存储b索引变量而不是计算两次:

static void Main()
{
    int[] a = new int[] {1, 2, 45, 4, 5, 6, 7};
    int[] b = new int[a.Length];

    for (int i = 0; i < a.Length; i++)
    {
        int bIndex = b.Length - i - 1;
        b[bIndex] = a[i];
        Console.WriteLine(b[bIndex]);
    }

    Console.ReadLine();
}

但是,这仍然会按照插入项目的顺序输出项目 ,该顺序与它们在a中出现的顺序相同。如果要显示b中的项目与a相反,最简单的方法是在填充b之后执行此操作。请注意,我们可以在此处使用string.Join方法来用逗号将每个项目连接起来:

static void Main()
{
    int[] a = new int[] {1, 2, 45, 4, 5, 6, 7};
    int[] b = new int[a.Length];

    for (int i = 0; i < a.Length; i++)
    {
        b[b.Length - i - 1] = a[i];
    }

    Console.WriteLine($"'a' array: {string.Join(",", a)}");
    Console.WriteLine($"'b' array: {string.Join(",", b)}");

    Console.ReadLine();
}

输出

enter image description here

答案 1 :(得分:4)

如果要从现有数组创建反向数组,可以使用Reverse扩展方法:

//using System.Linq;
int[] a = new int[] { 1, 2, 45, 4, 5, 6, 7 };
int[] b = a.Reverse().ToArray();

答案 2 :(得分:2)

您可以使用这种语法

int[] a = {1, 2, 45, 4, 5, 6, 7};
int[] b = new int[7];

for (int i = 0, j = b.Length - 1; i < a.Length; i++, j--)
{
    b[i] = a[j];
    Console.WriteLine(b[i]);
}