C#/수업과제

0323_ 람다식 연습

minquu 2021. 3. 24. 00:32
반응형

1. Action 델리게이트 생성 

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

namespace study8
{
    public class App
    {
        public App() {
            //대리자 초기화
            Action hello = this.SayHello;
            //대리차 호출
            hello();
        }
        private void SayHello() {
            Console.WriteLine("Say hello!");
        }
    }
}

----

2.익명과 람다식으로 대리자 초기화 -> 호출

 

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

namespace study8
{
    public class App
    {
        public App()
        {
            //대리자 초기화 
            Action hello = () =>
            {
                Console.WriteLine("익명 람다식으로 초기화");
            };
            //대리차 호출
            hello();
        }
    }
}

----

3. 매개변수가 있는 Action으로 delegates

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

namespace study8
{
    public class App
    {
        public App()
        {   //대리자 초기화
            Action<string> creatunit = CreateUnit;
            //대리자 호출
            creatunit("Marine");
        }
        private void CreateUnit(string unit) {
            Console.WriteLine("{0} 유닛이 생성되었습니다.", unit);
        }
    }
}

------

4.매개변수가 있는 람다식으로 바로 delegate 시키기

 

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

namespace study8
{
    public class App
    {
        public App()
        {
            Action<string> createUnit = (unit) =>
            {
                Console.WriteLine("{0} 유닛을 생성하였습니다.", unit);
            };
            createUnit("Zergling");
        }

    }
}

------

5.func<T,TResult> 대리자

T 값이 들어오고 / TResult 값으로 내보낸다.

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

namespace study8
{
    public class App
    {
        public App()
        {   //대리자 초기화
            Func<int, int> add = this.Add;
            //대리자 호출
            int result = Add(10);
            //출력
            Console.WriteLine(result);
        }
        private int Add(int x){
            return x + x;
        }
    }
}

 

------

6.func<T,TResult> 대리자 / 람다식으로 

//람다식 안에 메서드 기능을 식으로

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

namespace study8
{
    public class App
    {
        public App()
        {   //대리자 초기화
            Func<int, int> add = (x) => x + x;
            //대리자 호출
            int result = add(20);
            //출력
            Console.WriteLine(result);
        }
    }
}

//람다식 안에 메서드 기능을 문으로

 

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

namespace study8
{
    public class App
    {
        public App()
        {   //대리자 초기화
            Func<int, int> add = (x) => { return x + x; };
            //대리자 호출
            int result = add(20);
            //출력
            Console.WriteLine(result);
        }
    }
}

 

-----

7. Linq와 람다식을 사용하여 Linq 기능 Where 와 Find 사용하기

 

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

namespace study8
{
    public class App
    {
        public App()
        {
            List<string> fruits = new List<string>();
            fruits.Add("사과");
            fruits.Add("포도");
            fruits.Add("복숭아");
            fruits.Add("딸기");
            fruits.Add("딸기");
            IEnumerable<string> foundFruits = fruits.Where(p => p == "딸기");
            foreach (string fruit in foundFruits) {
                Console.WriteLine(fruit);
            }
            string foundFruit = fruits.Find(x => x == "귤");
            Console.WriteLine("foundFruit : {0}", foundFruit);
        }
    }
}

------

8. Linq와 람다식을 사용하여 // Find로 물건 찾기 , Where 로 갯수 찾기

 

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

namespace study8
{
    public class App
    {
        public App()
        {   //컬렉션 생성
            List<Fruits> fruits = new List<Fruits>();
            // Fruits 객체 생성
            Fruits fruits1 = new Fruits("포도");
            Fruits fruits2 = new Fruits("사과");
            Fruits fruits3 = new Fruits("사과");
            Fruits fruits4 = new Fruits("딸기");
            //컬렉션 추가
            fruits.Add(fruits1);
            fruits.Add(fruits2);
            fruits.Add(fruits3);
            fruits.Add(fruits4);
            //컬렉션에서 Fruits객체의 이름이 xxx인것을 찾으세요 
            //Linq: Find + 람다 
            Fruits fruit = fruits.Find(x => x.fruitsName == "사과");
            if (fruit != null)
            {
                Console.WriteLine("{0}를 찾았습니다!.", fruit.fruitsName);
            }
            else
            {
                Console.WriteLine("아무것도 찾지 못했습니다.");
            }
            //만약에 같은 이름의 요소가 있다면 모두 찾아서 출력 하세요
            //Linq: Where + 람다 
            var foundFruits = fruits.Where(x => x.fruitsName == "사과");
            Console.WriteLine("{0} 개 찾았습니다!", foundFruits.Count());

        }
    }
}

-----

9. List<T>.FindAll(Predicate<T>) 메서드 연습

 

 

List<Item> list = items.FindAll(FindWeaponType); // findAll 대리자에 직접 메서드 넣기

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

namespace study8
{
    public class Item {
        public string ID{ get; set; }
        public string ItemName { get; set; }
        public string Type { get; set; }
        public DateTime GetTime { get; set; }
        //tostring 메소드로 일정한 포맷 만들기
        public override string ToString()
        {
            return string.Format("{0} {1} {2} {3}", this.ID, this.ItemName,this.Type, this.GetTime);
        }
    }
    public class App
    {
        public App()
        {
            //컬렉션 인스턴스화
            List<Item> items = new List<Item>();
            // 객체 생성
            var items1 = new Item()
            {
                ID = "301",
                ItemName = "전설의 검",
                Type = "무기",
                GetTime = new DateTime(2021, 03, 24)
            };
            var items2 = new Item()
            {
                ID = "302",
                ItemName = "강력한 방패",
                Type = "무기",
                GetTime = new DateTime(2021, 03, 14)
            };
            //출력
            Console.WriteLine(items1.ToString());
            //추가
            items.Add(items1);
            items.Add(items2);

            List<Item> list = items.FindAll(FindWeaponType);
            // 요소 수
            Console.WriteLine(list.Count);
            // 출력
            foreach (Item item in list)
            {
                Console.WriteLine(item.ToString());
            }
        }

    
        private bool FindWeaponType(Item item) {
            if (item.Type == "무기")
            {
                return true;
            }
            else {
                return false;
            }
        }
    }
}

 

 

  //람다식으로 한번에 메서드 정의하기

 

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

namespace study8
{
    public class Item {
        public string ID{ get; set; }
        public string ItemName { get; set; }
        public string Type { get; set; }
        public DateTime GetTime { get; set; }
        //tostring 메소드로 일정한 포맷 만들기
        public override string ToString()
        {
            return string.Format("{0} {1} {2} {3}", this.ID, this.ItemName,this.Type, this.GetTime);
        }
    }
    public class App
    {
        public App()
        {
            //컬렉션 인스턴스화
            List<Item> items = new List<Item>();
            // 객체 생성
            var items1 = new Item()
            {
                ID = "301",
                ItemName = "전설의 검",
                Type = "무기",
                GetTime = new DateTime(2021, 03, 24)
            };
            var items2 = new Item()
            {
                ID = "302",
                ItemName = "강력한 방패",
                Type = "무기",
                GetTime = new DateTime(2021, 03, 14)
            };
            //출력
            Console.WriteLine(items1.ToString());
            //추가
            items.Add(items1);
            items.Add(items2);
            //람다식으로 한번에 메서드 정의하기
            List<Item> list = items.FindAll((item) =>
            {
                if (item.Type == "무기") return true;
                else return false;
            });
            // 요소 수
            Console.WriteLine(list.Count);
            // 출력
            foreach (Item item in list)
            {
                Console.WriteLine(item.ToString());
            }
        }
    }
}

 

반응형

'C# > 수업과제' 카테고리의 다른 글

0329_복습 // Thread  (0) 2021.03.30
0324_ JSON 파일 리스트화  (0) 2021.03.24
0322_ delegates 연습  (0) 2021.03.22
0321 _ 현재 본인 판단 표  (0) 2021.03.21
0318_ArrayList, List<T>, Dictionary 예제 연습  (0) 2021.03.19