C#でのクラス配列のソートで悩んでいます。
using System; using System.Collections.Generic; namespace ProgramCS { class MainClass { public class PlayerData { public int mAttack; public int mDefence; public int mMagic; } public static void Main(string[] args) { int playerTotal = int.Parse(Console.ReadLine()); List<PlayerData> player = new List<PlayerData>(playerTotal); for (int i = 0; i < playerTotal; i++) { player.Add(new PlayerData()); } //各プレイヤーの能力値の割り当て for (int i = 0; i < playerTotal; i++) { var n = Console.ReadLine(); string[] str = n.Split(' '); player[i].mAttack = int.Parse(str[0]); player[i].mDefence = int.Parse(str[1]); player[i].mMagic = int.Parse(str[2]); n = string.Empty; } player.Sort((x, y) => { return y.mAttack.CompareTo(x.mAttack); }); foreach (PlayerData a in player) { Console.WriteLine("{0} {1} {2}", a.mAttack, a.mDefence, a.mMagic); } } } }
上記コードにて、各プレイヤーのAttackの数値が最も大きい者から順に出力出来る様にしました。ですが、最終的には、
・Attackが同値だったら次はDefenceで比較
・Defenceも同値だったら最後はMagicで比較
という風に、Attack > Defence > Magicの優先順位で比較したい場合、Sort関数等を使用してコンパクトにコードをまとめる事が出来るのでしょうか?
それとも、原始的なやり方(for文で比較し値を置き換える)でしか不可能でしょうか?
もしご存知でしたらアドバイス頂ければと思います。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/12 09:36 編集
2017/06/12 21:54
2017/06/12 23:59