RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1438174
Accepted
Humble Newbie
Humble Newbie
Asked:2022-08-11 00:10:53 +0000 UTC2022-08-11 00:10:53 +0000 UTC 2022-08-11 00:10:53 +0000 UTC

C#。新手无法弄清楚如何反转数组数组[关闭]

  • 772
关闭。这个问题需要澄清或补充细节。目前不接受回复。

想改进这个问题?通过编辑此帖子添加更多详细信息并澄清问题。

1 个月前关闭。

改进问题

从零开始学习 C#,没有任何编程经验。已到达数组(提前 - 方法)。通过按类型轻松排序,弄清楚如何对常规数组(一维、二维、三维等)进行排序和反转

temp = nums[i][j];
nums[i][j] = nums[k][m];
nums[k][m] = temp;

但是我无法理解如何通过类似的构造来反转数组数组:((

我知道我正在重新发明轮子,但我想利用目前可用的知识来做这件事,并在几个月后回到这个任务并正常做。

一些特定的数组数组,如

int[][] nums = new int[3][];
nums[0] = new int[1];
nums[1] = new int[2];
nums[2] = new int[3];

事实证明,通过拐杖可以完成,但这是一种一次性解决方案,如果您更改数组元素的数量,它就不起作用。

数组数组的降序和升序排序没有问题,一切都不需要拐杖,堵嘴只有反向。

这是一个反转二维数组的示例(不笑,只是我尝试这样做的一个示例)

Random random = new Random();

int[,] numbers = new int[random.Next(2,10), random.Next(2, 10)];

for (int i = 0; i < numbers.GetLength(0); i++)
{
    for (int j = 0; j < numbers.GetLength(1); j++)
    {
        numbers[i, j] = random.Next(-100, 100);
    }
}

Console.WriteLine($"2D array is: {numbers.GetLength(0)}, {numbers.GetLength(1)}");
Console.WriteLine();
Console.WriteLine("Original array is: ");

for (int i = 0; i < numbers.GetLength(0); i++)
{
    for (int j = 0; j < numbers.GetLength(1); j++)
    {
        Console.Write($"{numbers[i, j]}\t");
    }
    Console.WriteLine();
}
Console.WriteLine();

int temp = 0;
int i_mid = numbers.GetLength(0) / 2;
int j_mid = numbers.GetLength(1) / 2;                          

for (int i = 0; i < numbers.GetLength(0); i++)
{
    for (int j = 0; j < j_mid; j++)
    {
        temp = numbers[i, j];
        numbers[i, j] = numbers[numbers.GetLength(0) - (i + 1), numbers.GetLength(1) - (j + 1)];
        numbers[numbers.GetLength(0) - (i + 1), numbers.GetLength(1) - (j + 1)] = temp;
    }
    if (remainder > 0 && i < i_mid)
    {
        temp = numbers[i, j_mid];
        numbers[i, j_mid] = numbers[numbers.GetLength(0) - (i + 1), j_mid];
        numbers[numbers.GetLength(0) - (i + 1), j_mid] = temp;
    }
}
Console.WriteLine("Reversed array is: ");

for (int i = 0; i < numbers.GetLength(0); i++)
{
    for (int j = 0; j < numbers.GetLength(1); j++)
    {
        Console.Write($"{numbers[i, j]}\t");
    }
    Console.WriteLine();
}
Console.WriteLine();

并对数组数组进行排序

Random random = new Random();
int temp = 0;
int[][] nums = new int[3][];
nums[0] = new int[1];
nums[1] = new int[2];
nums[2] = new int[3];

Console.WriteLine("Original array is: ");
for (int i = 0; i < nums.Length; i++)
{
    for (int j = 0; j < nums[i].Length; j++)
    {
        nums[i][j] = random.Next(100);
    }
}

for (int i = 0; i < nums.Length; i++)
{
    for (int j = 0; j < nums[i].Length; j++)
    {
        Console.Write($"{nums[i][j]}\t");
    }
    Console.WriteLine();
}

for (int i = 0; i < nums.Length; i++)
{
    for (int j = 0; j < nums[i].Length; j++)
    {
        for (int k = 0; k < nums.Length; k++)
        {
            for (int m = 0; m < nums[k].Length; m++)
            {
                if(nums[i][j] > nums[k][m])
                {
                    temp = nums[i][j];
                    nums[i][j] = nums[k][m];
                    nums[k][m] = temp;
                }
            }
        }
    }
}
Console.WriteLine();
Console.WriteLine("Descending sorted array is: ");

for (int i = 0; i < nums.Length; i++)
{
    for (int j = 0; j < nums[i].Length; j++)
    {
        Console.Write($"{nums[i][j]}\t");
    }
    Console.WriteLine();
}
c# массивы
  • 1 1 个回答
  • 93 Views

1 个回答

  • Voted
  1. Best Answer
    tym32167
    2022-08-11T00:36:53Z2022-08-11T00:36:53Z

    反过来,我们首先为一维数组编写算法。

    首先,我们需要一个交换两个元素的函数

    void Swap<T>(T[] data, int i, int j)
    {
        (data[i], data[j]) = (data[j], data[i]);
    }
    

    然后是一维数组的通常反向代码,从两端开始交换元素

    void Reverse<T>(T[] array)
    {
        var l = 0;
        var r = array.Length - 1;
        while (l < r) Swap(array, l++, r--);
    }
    

    让我们反转数组来检查

    int[] test1 = new[] { 1, 2, 3, 4, 5, 6 };
    Console.WriteLine("test1 before reverse");
    Console.WriteLine(string.Join(", ", test1));
    Reverse(test1);
    Console.WriteLine("test1 after reverse");
    Console.WriteLine(string.Join(", ", test1));
    

    输出

    test1 before reverse
    1, 2, 3, 4, 5, 6
    test1 after reverse
    6, 5, 4, 3, 2, 1
    

    嗯,你可以看到数组数组是同一个一维数组,没有区别。因此,您可以重用代码并首先反转每个嵌套数组,然后是数组本身(尽管顺序在这里并不重要)

    int[][] test2 = new int[][] { new int[] { 1, 2, 3 }, 
                                  new int[] { 4, 5, 6 }, 
                                  new int[] { 7, 8, 9 } };
    
    Console.WriteLine("test2 before reverse");
    
    foreach (var array in test2)
        Console.WriteLine(string.Join(", ", array));
    
    foreach (var array in test2) Reverse(array);
    Reverse(test2);
    
    Console.WriteLine("test2 after reverse");
    foreach (var array in test2)
        Console.WriteLine(string.Join(", ", array));
    

    输出是可预测的

    test2 before reverse
    1, 2, 3
    4, 5, 6
    7, 8, 9
    test2 after reverse
    9, 8, 7
    6, 5, 4
    3, 2, 1
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5