連想配列を特定のKeyでソートをする方法を探しています。
また、並び順は、昇順(降順)ではなく、別途用意した配列の順番に準拠させたいです。
PHPの場合はusortを使ってソート時に関数を実行し、その結果でソートする方法を思いつきます。
C#で同様の事をしたい場合は、実現する方法はありますか?
例
Userという独自のクラスを用意し、Indexをキーにします。
並び順は、OrderIndexsという配列を用意し、それに合わせて連想配列を並び替えます。
Userクラス
cs
1public class User { 2 public int Index { get; private set; } // 番号 3 public string Name { get; private set; } // 名前 4 5 public User( 6 int index, 7 string name, 8 ) 9 { 10 Index = index; 11 Name = name; 12 } 13}
処理クラス
中途半端な状態で恐縮ですが、processという関数内でソートをしようと考えました。
ただ、処理の書き方がわからず、止まってしまいました。
cs
1public class Controller { 2 3 User[] Users = new User[]{ 4 new User(1, 'ユーザー1'); 5 new User(2, 'ユーザー2'); 6 new User(3, 'ユーザー3'); 7 new User(4, 'ユーザー4'); 8 new User(5, 'ユーザー5'); 9 }; 10 11 // ソートする順番を指定した配列 12 int[] OrderIndexs = {5, 3, 2, 4 ,1} 13 14 public process(){ 15 16 // OrderIndexの配列順に合わせてUsersを並び替えたいのですが、その方法がわかりません。 17 // ソートの条件をスクリプトで指定する方法があれば教えていただきたいです。 18 Users.Sort(CompareByIndex()) ? 19 20 } 21 22 // ソート自体のスクリプト 23 // 引数のUserのIndexを元に、OrderIndexsからIndexOfで順番を取得。 24 // 比較して順番を変える 25 private static int CompareByIndex(User a, User b) 26 { 27 return Array.IndexOf(OrderIndexs, a.Index) < Array.IndexOf(OrderIndexs, b.Index); 28 } 29} 30
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/29 23:53 編集
2018/09/29 23:57 編集
2018/09/30 00:01
2018/09/30 00:11
2018/09/30 00:16