主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年4月22日金曜日

ScriptableObjectのListにクエリやラムダ式を使ってみる

前回ScriptableObjectを作成したが、今回はそのListから任意のデータや並び替えを行いたい。下記は実際にラムダ式を使ったクラスの一部抜粋である。名前空間にSystem.Linqが必要になるので、忘れないように注意。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Linq;
public class StudyManager : MonoBehaviour {
[SerializeField] QuestionDB qDB;
private int[] indexList = new int[10];
// Use this for initialization
void Start () {
//指定のカテゴリIDのリストを抽出
var cList = qDB.list.FindAll(qData => qData.categoryID == SQLMethods.CerrentID());
//データベースの更新
SQLMethods.InsertQDB(cList);
//datetime昇順で並べ替え
var newList = cList.OrderBy(p => p.datetime);
//idを配列に移す
int i = 0;
foreach(var n in newList){
if(i < 10){
indexList[i] = n.id;
}else{
break;
}
i++;
}
}
}
view raw StudyMagager.cs hosted with ❤ by GitHub

14行目:FindAll

ここでは、現在選択中のカテゴリIDと一致する設問データを抽出している。カッコ内左側で任意の名前の仮引数を作り、=> の右側に条件文を書く。これが基本的なルールであり、割と気軽に使える。


18行目:OrderBy

 OrderByは任意のパラメータの昇順で並び替える。上記同様、カッコ内の左側が仮引数、右側が条件文。ここではDateTime型のパラメータで並び替えている。

OrderByは元のListを変更せずに、並び替えた仮想のリストを返してくる。この型は今の所よく分わからないのでvarで受けている IOrderedEnumerable<T>。Listに使えるメソッドは使えず、IEnumerableクラスのクエリメソッドが使える。詳しくはこちらソートが実際に行われるのはForeachなどで列挙操作が行われた時なので注意が必要。よって列挙操作なしに並び替え後の要素を取り出すことができない。

<追記>

ちなみにGuidと組み合わせることで、セキュリティ性能の高いシャッフルを実装できる(参考)。なお、UnityではSystem.Guidとする必要があった。

0 件のコメント:

コメントを投稿