stringでH,O,G,Eという文字列が格納されたList<string>があるとします。
その際に、あるケースでは「H,O,G,E」、別のケースでは「O,H,G,E」、
はたまた別のケースでは「E,H,O,G」…
という風に状況に応じてソート順を変えたいと思います。
一旦、以下のようなコードを書いて実現できました。
public class StringComparer : IComparer<string> { private Dictionary<string, int> hogeDic; public StringComparer (Dictionary<string, int> dic) { hogeDic = dic; } public int Compare(string x, string y) { return hogeDic[x].CompareTo(hogeDic[y]); } } class Program { static void Main(string[] args) { var list1 = new List<tring>() { "H", "O", "G", "E". }; var sortDic = new Dictionary<string, int>() { ["A"] = 1, ["B"] = 2, ["C"] = 3, } list1.Sort(new StringComparer(sortDic)); list1.ForEach(x => Console.WriteLine(x)); } }
動くので問題ないといえば問題ないのですが、
なんとなく、もっとうまい方法がありそうな気がしています。
(サンプルコードを探しても、dictionaryを外から与えているコードはなかなか無かったため、「変なやり方」になっているのではないかという不安もあり…。)
何か他に良い方法はございませんでしょうか。
あなたの回答
tips
プレビュー