前回ScriptableObjectを作成したが、今回はそのListから任意のデータや並び替えを行いたい。下記は実際にラムダ式を使ったクラスの一部抜粋である。名前空間にSystem.Linqが必要になるので、忘れないように注意。
14行目:FindAll
ここでは、現在選択中のカテゴリIDと一致する設問データを抽出している。カッコ内左側で任意の名前の仮引数を作り、=> の右側に条件文を書く。これが基本的なルールであり、割と気軽に使える。
18行目:OrderBy
OrderByは任意のパラメータの昇順で並び替える。上記同様、カッコ内の左側が仮引数、右側が条件文。ここではDateTime型のパラメータで並び替えている。
OrderByは元のListを変更せずに、並び替えた仮想のリストを返してくる。この型は
今の所よく分わからないのでvarで受けている IOrderedEnumerable<T>。Listに使えるメソッドは使えず、IEnumerableクラスのクエリメソッドが使える。詳しくはこちら。ソートが実際に行われるのはForeachなどで列挙操作が行われた時なので注意が必要。よって列挙操作なしに並び替え後の要素を取り出すことができない。
<追記>
ちなみにGuidと組み合わせることで、セキュリティ性能の高いシャッフルを実装できる(参考)。なお、UnityではSystem.Guidとする必要があった。
0 件のコメント:
コメントを投稿