2019년 5월 17일 금요일

Unity에서 List 의 FindAll() 을 이용한 데이터 취합

Unity에서 List의 FinaAll()을 이용해 데이터를 취합하는 방법이다.
List에 저장되어 있는 데이터를 이용해 취합하려는 조건을 설정 할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NumGroup
{
    public int     index;
    public string  name;

    public NumGroup(int index, string name)
    {
        this.index = index;
        this.name = name;
    }
}

public class LinqExample : MonoBehaviour
{
    List numbersA = new List();
    List numbersB = new List();

    List numGroupA = new List();
    List numGroupB = new List();

    void Start()
    {
        // numbersA : 1,2,5,8
        numbersA.Add(1);
        numbersA.Add(2);
        numbersA.Add(5);
        numbersA.Add(8);

        // numbersB : 1,3,5,7,9
        numbersB.Add(1);
        numbersB.Add(3);
        numbersB.Add(5);
        numbersB.Add(7);
        numbersB.Add(9);

        // FindAll 메서드
        // list 에 저장되어 있는 int 값 n 을 이용해 n % 2 == 0 연산이 옳으면 저장 한다.
        List findallA = numbersA.FindAll(n => n % 2 == 0);
        // 결과 : 2, 8

        // FindAll 메서드
        // list 에 저장되어 있는 int 값 n 을 이용해 n != numbersB[0] 연산이 옳으면 저장 한다.
        List findallB = numbersA.FindAll(n => n != numbersB[0]);
        // 결과 : 2, 5, 8


        ///
        /// class 형식의 데이터 연산
        ///
        
        // numbersA : 1 "가나다" , 2 "마바사" , 5 "아자차" , 8 "파타하"
        numGroupA.Add(new NumGroup(1, "가나다"));
        numGroupA.Add(new NumGroup(2, "마바사"));
        numGroupA.Add(new NumGroup(5, "아자차"));
        numGroupA.Add(new NumGroup(6, "파타하"));

        // numbersB : 1 "AAA" , 3 "BBB" , 5 "CCC" , 7 "DDD" , 9 "EEE"
        numGroupB.Add(new NumGroup(1, "AAA"));
        numGroupB.Add(new NumGroup(3, "BBB"));
        numGroupB.Add(new NumGroup(5, "CCC"));
        numGroupB.Add(new NumGroup(7, "DDD"));
        numGroupB.Add(new NumGroup(9, "EEE"));

        // FindAll 메서드
        // list 에 저장되어 있는 NumGroup 클래스 n(numGroupA) 을 이용해 n.index % 2 == 0 연산이 옳으면 저장 한다. 
        List findallGroupA = numGroupA.FindAll(n => n.index % 2 == 0);
        // 결과 : 2 "마바사" , 8 "파타하"
        
        // FindAll 메서드
        // list 에 저장되어 있는 NumGroup 클래스 n(numGroupA) 을 이용해 n.index != numGroupB[0].index 연산이 옳으면 저장 한다. 
        List findallGroupB = numGroupA.FindAll(n => n.index == numGroupB[0].index);
        // 결과 : 1 "가나다"


        // FindAll 메서드
        List findallGroupC = new List();

        // List의 AddRange()는 한번에 다수의 데이터(데이터 목록)를 추가 할 수 있다. (IEnumerable 인터페스를 구현한 컬렉션 객체의 추가가 가능하다.)
        // list 에 저장되어 있는 NumGroup 클래스 n(numGroupA) 을 이용해 n.index != numGroupB[i].index 연산이 옳으면 더한다.
        for (int i = 0; i < numGroupB.Count; i++)
        {
            findallGroupC.AddRange(numGroupA.FindAll(n => n.index == numGroupB[i].index));
        }
        // 결과 : 1 "가나다" , 5 "아자차"

    }
}

댓글 없음:

댓글 쓰기

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...