C#/수업 내용

2023.01.12 오전수업 : LINQ

Bueong_E 2023. 1. 12. 12:24
반응형
SMALL

객체 이니셜라이저 예제

App Class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study011
{
    class App
    {
        public string Name
        {
            get; set;
        }
        public int damage;
        //생성자
        public App()
        {
            //생성자 매개변수 활용
            Item item = new Item("홍길동",10);

            // 두번째 방법
            Item item2 = new Item(); 
            item.Name = "장검";
            item.damage = 10;

            //개체 이니셜라이저
            //해당 객체가 가지고 있는 속성(프로퍼티), 필드에 접근 가능
            //컨트롤 + 스페이스바 로 자동 접근 가능
            Item item1 = new Item() { Name = "단검", damage = 10 };

        }
    }
}

생성자 오버로드

App Class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study11
{
    class App
    {
        //생성자 
        public App()
        {
            //생성자 매개변수를 활용 
            Item item0 = new Item("창", 11);

            //인스턴스 만들고 개별로 데이터 넣기 
            Item item1 = new Item();
            item1.Name = "장검";
            item1.damage = 8;

            //개체 이니셜라이져 (프로퍼티, 필드)
            //컨트롤 + 스페이스바 
            Item item2 = new Item() { Name = "단검", damage = 5 };

        }
    }
}

객체 이니셜라이저를 이용 for문으로 아이템 데미지가 일정값이상인 아이템만 골라오

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study011
{
    class App
    {
        public string Name
        {
            get; set;
        }
        public int Damage
        {
            get; set;
        }
        //생성자
        public App()
        {
            Item[] items =
            {
                new Item(){Name = "장검",damage = 10},
                new Item(){Name = "단검",damage = 5 },
                new Item(){Name = "창",damage = 11 },
                new Item(){Name = "도끼",damage = 8 },
                new Item(){Name = "도끼",damage = 8 },
                new Item(){Name = "활",damage = 6 },
                new Item(){Name = "철퇴",damage = 7 },
            };
         
            //Damage 가 5 이상인 모든 아이템을 출력하세요.
            //원래대로면 우리는 for문으로 했을것이다.
            for(int i =0;i < items.Length; i++)
            {
                Item item = items[i];
                if (item.damage > 5)
                {
                    Console.WriteLine("{0}, damage : {1}", item.Name, item.damage);
                }
            }

        }
    }
}

실제 LINQ 사용 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study11
{
    class App
    {
        //생성자 
        public App()
        {
            Item[] items = {
                new Item(){ Name="장검", Damage = 10},
                new Item(){ Name="단검", Damage = 5},
                new Item(){ Name="창", Damage = 11},
                new Item(){ Name="도끼", Damage = 8},
                new Item(){ Name="지팡이", Damage = 3},
                new Item(){ Name="활", Damage = 6},
                new Item(){ Name="철퇴", Damage = 7},
            };

            //damage가 5 이상인 모든 아이템들을 List 에 넣고 List에 있는 모든 요소를 출력 
            List<string> list = new List<string>(); //컬렉션 사용전 인스턴스화 필수 
            for (int i = 0; i < items.Length; i++) {
                Item item = items[i];
                if (item.Damage >= 5) {
                    list.Add(item.Name);
                }
            }

            //foreach (string itemName in list) {
            //    Console.WriteLine("{0}", itemName);
            //}

            //Linq 
            //IEnumerable<string> itemNames = from 범위변수 in 컬렉션

            IEnumerable<string> itemNames = from item in items
                                            where item.Damage >= 5
                                            //orderby item.Damage ascending   //오름차순 
                                            orderby item.Damage descending   //내림차순 
                                            select item.Name;

            foreach (string itemName in itemNames) {
                Console.WriteLine(itemName);
                
                /LINQ가 5이상인 아이템들을 필터
            //새로운 시퀀스에 담고 싶다.
            //원본을 안건드리고 시퀀스를 이용하고 싶다.
            //새시퀀스들을 어떤 값들로 넣을까
            //ex) List에 있는 아이템들은 등급이 있다.
            //아이템들중에 신화급 아이템들만 사용자에게 보여주고 싶다

            //인터페이스는 인스턴스화 할수 없기 떄문에 그냥 타입이다.
            // var itemNames = from 범위변수 in 컬렉션
            IEnumerable<string> itemNames = from item //foreach의 반복변수에는 타입이 있었지만 여긴 없음
                            in items
                            where item.Damage >= 5
                            //orderby item.Damage ascending //오름차순
                            orderby item.Damage descending  //내림차순
                            select item.Name;  //반환값이 string 임

            foreach(string itemName in itemNames)
            {
                Console.WriteLine(itemName);
            }
            }
        }
    }
}

LINQ 무명형식사용

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study11
{
    class App
    {
        //생성자 
        public App()
        {
            Item[] items = {
                new Item(){ Name="장검", Damage = 10},
                new Item(){ Name="단검", Damage = 5},
                new Item(){ Name="창", Damage = 11},
                new Item(){ Name="도끼", Damage = 8},
                new Item(){ Name="지팡이", Damage = 3},
                new Item(){ Name="활", Damage = 6},
                new Item(){ Name="철퇴", Damage = 7},
            };

            //damage가 5 이상인 모든 아이템들을 List 에 넣고 List에 있는 모든 요소를 출력 
            List<string> list = new List<string>(); //컬렉션 사용전 인스턴스화 필수 
            for (int i = 0; i < items.Length; i++) {
                Item item = items[i];
                if (item.Damage >= 5) {
                    list.Add(item.Name);
                }
            }

            //foreach (string itemName in list) {
            //    Console.WriteLine("{0}", itemName);
            //}

            //Linq 
            //IEnumerable<string> itemNames = from 범위변수 in 컬렉션

            var sequence = from item in items
                            where item.Damage >= 5
                            //orderby item.Damage ascending   //오름차순 
                            //orderby item.Damage descending   //내림차순 
                            select new { Name = item.Name };

            foreach (var item in sequence)
            {
                Console.WriteLine(item.Name);
            }
        }
    }
}

LINQ의 쿼리 구문 및 메서드 구문 - 예시 없었음

 

 

 

반응형
LIST