FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Listの特定のアイテムを取り出す時って、Findを使ってますか?Linqを使ってますか? 

    こんにちは!坂内です!

    UnityでListから特定のアイテムを取り出す場合、Find使ってますか?Linqを使ってますか?

    Findを使う場合はこんな感じ。
    (複数取り出すのでFindAllを使ってます)

    [TestClass.cs]

    using System.Collections.Generic;
    using UnityEngine;

    public class Test0323 : MonoBehaviour
    {
    public class TestClass {
    public int no;
    public string name;
    }
    public List<TestClass> testClasses;

    void Start()
    {
    testClasses = new List<TestClass>();
    // 初期データ
    for(int i = 0; i < 10; i++) {
    TestClass testClass = new TestClass();
    testClass.no = i;
    testClass.name = "Name:" + i;
    testClasses.Add(testClass);
    }
    ViewTestClass(testClasses);

    // iが2と5の物だけを出力
    List classes25 = new List<TestClass>();
    classes25 = testClasses.FindAll(x => x.no == 2 || x.no == 5);
    ViewTestClass(classes25);
    }

    void ViewTestClass(List<TestClass> args) {
    Debug.Log("-----------------------------------------------");
    foreach(TestClass testClass in args) {
    Debug.Log("No:" + testClass.no + "/Name:" + testClass.name);
    }
    }
    }





    同じことはLinqでもできますね。


    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;

    public class Test0323 : MonoBehaviour
    {
    public class TestClass {
    public int no;
    public string name;
    }
    public List<TestClass> testClasses;

    void Start()
    {
    testClasses = new List<TestClass>();
    // 初期データ
    for(int i = 0; i < 10; i++) {
    TestClass testClass = new TestClass();
    testClass.no = i;
    testClass.name = "Name:" + i;
    testClasses.Add(testClass);
    }
    ViewTestClass(testClasses);

    // iが2と5の物だけを出力
    var classes25 = testClasses.Where(x => x.no == 2 || x.no == 5);
    ViewTestClass(classes25);
    }

    void ViewTestClass(IEnumerable<TestClass> args) {
    Debug.Log("-----------------------------------------------");
    foreach(TestClass testClass in args) {
    Debug.Log("No:" + testClass.no + "/Name:" + testClass.name);
    }
    }
    }



    LinqではFindの代わりにWhereを使うことで特定のアイテムを取り出すことが可能です。

    LinqはUsing System.Linq;を書かないといけません。
    また、戻り値はListではなくIEnumerableになります。

    使いやすいほうを是非お使いください。

    ってことで、Listデータの絞込についてでした!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/686-9c3d6bdc
    この記事にトラックバックする(FC2ブログユーザー)