#背景
様々な要素が塊となった際に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才
##まとめ
書き方については他の方の書き方を参考にさせていただきながら書いてみました。ありがとうございます。
クラス化させることで追加で要素を増やしたくなった場合にも柔軟に対応できるのかなと思いました