LoginSignup
1
2

More than 3 years have passed since last update.

複数の型要素を持った項目をソートする方法 (C#)

Last updated at Posted at 2021-01-21

背景

様々な要素が塊となった際にintの要素の項目でsort処理(昇順、降順)を行い、それに伴ってセットとなっている他の値も並び替える方法を探していた為。
アウトプットとしてまとめて使いやすくする為。

環境

  • Mac (macOS Big Sur 11.1)
  • Visual studio for mac (8.8.5)

使用言語

C#

メリット

ソート内容に沿って様々な型要素(例えばstring型やbool型、char型)を使用できる

書き方(言語化)

1.項目をクラス化する
2.クラスにした内容をインスタンス化する
3.処理する際に使用するListの変数を用意する
4.クラス化した変数に入力したい情報を塊として入れていく
5.Listに要素を追加していく
6.int型の要素の差を比較する
7.その差を利用して要素を並び替える
8.(もし降順にしたい場合は逆にする※いきなり降順はこの場合は不可)
9.要素をforeachで出力する

書き方(code)

using System;
using System.Collections.Generic;

namespace test_for_Paiza
{
    //ここのクラスに情報をまとめる
    class Info
    {
        public string name;
        public int age;

        //情報は直接変数にアクセスできない様にメソッド化する
        public Info(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
    }

    class Program
    {
        static void Main()
        {
            //今回はコンソールから入力したものとする

            //入力回数を指定
            var N = int.Parse(Console.ReadLine());

            //Infoクラスをインスタンス化
            Info[] src = new Info[] { };

            //操作しやすい様に格納するListを生成
            var list = new List<Info>();

            //コンソールからの入力をForループで可変長にする
            for (int i = 0; i < N; i++)
            {
                string[] baseArray = Console.ReadLine().Trim().Split(' ');
                int intData = int.Parse(baseArray[1]);
                //Info型の変数srcに新規内容として格納
                src = new Info[] { new Info(baseArray[0],intData) };

                // listに要素を都度追加
                list.AddRange(src);
            }

            // listをソート
            var c = new Comparison<Info>(Compare);
            list.Sort(c);

            //降順にしたい場合はReverseメソッドを使用
            //list.Reverse();

            Console.WriteLine("以下からがソート済の内容です");

            foreach (Info i in list)
            {
                Console.WriteLine("name:{0}, age:{1}才", i.name, i.age);
            }


        }

        static int Compare(Info a, Info b)
        {
            //xには2つの値の差が入る
            var x = a.age - b.age;
            return x;
        }
    }
}

<入出力結果>
5
hideki 40
koichi 25
yohko 18
ken 34
miho 29
以下からがソート済の内容です
name:yohko, age:18才
name:koichi, age:25才
name:miho, age:29才
name:ken, age:34才
name:hideki, age:40才

まとめ

書き方については他の方の書き方を参考にさせていただきながら書いてみました。ありがとうございます。
クラス化させることで追加で要素を増やしたくなった場合にも柔軟に対応できるのかなと思いました

1
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2