dthy
@dthy (dorrrothy)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C# 配列のソートがわかりません。

配列のソート

paizaの問題集からの引用です。
https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_sort_step3?language_uid=c-sharp
paiza>ラーニングトップ>レベルアップ問題集>Cランクレベルアップメニュー>問題一覧 C#編>ソート>STEP3

            int n = int.Parse(Console.ReadLine());
            int[] a = new int[n];
            int[] b = new int[n];

            for (int i = 0; i < n; i++)
            {
                var xx = Console.ReadLine().Split(' ');
                a[i] = int.Parse(xx[0]);
                b[i] = int.Parse(xx[1]);
            }
            Array.Sort(a,b);
            Array.Reverse(a);
            Array.Reverse(b);

            for (int i = 0; i < n; i++)
            {
                Console.WriteLine($"{a[i]} {b[i]}");
            }

入力例1,2はこれで動いたのですが要素が増えるとうまくソートされないです。
原因を教えてほしいです。またこっちのやり方のが分かりやすいとかあれば教えていただきたいです。

0

2Answer

まず、paizaの規約に引っかかりそうなので、外部で聞くのはやめた方が良いです。
AtCoderだと問題の難度は上がりますが、新しめの言語仕様が使え、外で聞くのは問題ない上に解説も多く、他者の回答も見ることができるので学習面でもそちらの方がいいかと思います。

それはそれとして、Array.Sort(Array,Array)に対する認識が間違ってるのでもう一度(読みにくいですが)APIリファレンスを読んだり自身で入力を変えて試したりしてみるといいと思います。
https://docs.microsoft.com/ja-jp/dotnet/api/system.array.sort?view=netcore-3.1#System_Array_Sort_System_Array_System_Array_

1Like

https://paiza.jp/works/mondai
の冒頭に

なお、このコーナー内の問題については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
授業や研修にもご利用いただけますので、ぜひ教材などにもお使いください。

とあるので、質問するのはOKのようですね。

解き方の方針ですが、このりんごとバナナの数のペアは、このペアを保ったまま並び替わってほしいわけですよね。

なので、別々の配列を作るのではなく、一つの二次元配列を作って並び替える処理をするのが良いでしょう。

二次元配列とLINQのOrderBy(OrderByDescending)やThenBy(ThenByByDescending)メソッドの使い方を調べることで、スッキリ解けるのではないかと思います。

0Like

Your answer might help someone💌