본문 바로가기

워크

Lambda Expression

    class Lambda
    {
        class Department
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
        class Employee
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int DeptId { get; set; }
            public int Type { get; set; }
            public List<Department> depts { get; set; }
        }
        static void Main(string[] args)
        {
            int[] intArray = new[] { 96, 92, 24, 12, 17, 70, 27, 78, 15, 20 };
            string strResult = "";

            //람다 구문(Lambda Expression) 은(x => x + 25) 의 형태로([인수] => [반환 값]) 으로 구성된 익명 함수
            foreach (int element in intArray.Where(param => param >= 25))
            {
                strResult += element.ToString() + "," + " ";
            }

            strResult = strResult.TrimEnd(' ');
            strResult = strResult.TrimEnd(',');

            Console.WriteLine("Lambda Expression: {0}", strResult);

            List<int> numbers = new List<int>();
            for (int i = 1; i < 1000; i++)
            {
                numbers.Add(i);
            }
            //[C#] Tuple (튜플) Type 이란? (Tuples Enhancement)
            //Tuple (튜플) 은 C# 7.0 에서 추가된 Type 입니다. Tuple (튜플) Type 을 통해서 두 개 이상의 값을 반환하는 메서드대한 가상 구조체
            //이 형식은 NuGet 패키지로 System.ValueTuple 을 추가하시거나 .NET Framework를 4.7 이상의 버전을 설치하셔야 사용이 가능한 형식입니다.
            //[Manage NuGet Packages for Solution… (솔루션용 Nuget 패키지 관리)] 화면에서 “ValueTuple “을 검색하신 후 [Install (설치)] 버튼을 클릭하여 [System.ValueTuple] 패키지를 설치합니다.
            var range = Range(numbers);
            Console.WriteLine($"Max: {range.Max}, Min: {range.Min}");

            range = Range(range.Max, range.Min);
            Console.WriteLine($"Max: {range.Max}, Min: {range.Min}");

            (int max, int min) = Range(numbers);
            Console.WriteLine($"Max: {max}, Min: {min}");

            List<Department> departments = new List<Department>();
            departments.Add(new Department { Id = 1, Name = "Account" });
            departments.Add(new Department { Id = 2, Name = "Sales" });
            departments.Add(new Department { Id = 3, Name = "Marketing" });

            List<Employee> employees = new List<Employee>();
            employees.Add(new Employee { DeptId = 0, Type = 2, Id = 1, Name = "William" });
            employees.Add(new Employee { DeptId = 2, Type = 2, Id = 2, Name = "Miley" });
            employees.Add(new Employee { DeptId = 1, Type = 1, Id = 3, Name = "Benjamin" });

            //C# 6.0 Null-Conditional Operators (무효 조건 연산자)
            int? length = employees?.Count; // employees가 null 일 경우 null 값을 반환합니다.
            Employee first = employees?[0]; // employees가 null 일 경우 null 값을 반환합니다.
            int? count = employees?[0]?.depts?.Count; // employees, employees[0], Orders 중 하나라도 null 일 경우 null 값을 반환합니다
            
            Func<int, int, bool> testForEquality = (x, y) => x == y;
            Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;
            Func<(int i, int j), (int, int)> nums = ns => (ns.i+1, ns.j+1);

            var numberssss = (123, 234);
            var pnums = nums(numberssss);

            Console.WriteLine(pnums);

            Action<string> greet = name =>
            {
                string greeting = $"Hello {name}!";
                Console.WriteLine(greeting);
            };
            greet("World");

            //람다 식 및 튜플
            Func<(int, int, int), (int, int, int)> doubleThem = ns => (2 * ns.Item1, 2 * ns.Item2, 2 * ns.Item3);
            var numberss = (2, 3, 4);
            var doubledNumbers = doubleThem(numberss);
            Console.WriteLine($"The set {numberss} doubled: {doubledNumbers}");

            Func<(int n1, int n2, int n3), (int, int, int)> doubleThems = ns => (2 * ns.n1, 2 * ns.n2, 2 * ns.n3);
            var numbersss = (2, 3, 4);
            var doubledNumberss = doubleThems(numbersss);
            Console.WriteLine($"The set {numbersss} doubled: {doubledNumberss}");

            Console.WriteLine("\n아무 키나 누르세요.");
            Console.ReadKey();
        }
        public static string GetValue(string value, int length)
        {
            string result = value;
            if (value != null) // 설명을 위해 빈 문자열 확인 과정은 생략합니다.
            {
                result = value.Substring(0, Math.Min(value.Length, length));
            }
            return result;
        }
        public static string GetValue6(string value, int length)
        {
            return value?.Substring(0, Math.Min(value.Length, length));
        }
        private static (int Max, int Min) Range(IEnumerable<int> numbers)
        {
            int min = int.MaxValue;
            int max = int.MinValue;

            foreach (var n in numbers)
            {
                min = (n < min) ? n : min;
                max = (n > max) ? n : max;
            }

            return (max, min);
        }
        private static (int Max, int Min) Range(int i, int j)
        {
            int min = int.MaxValue;
            int max = int.MinValue;

            foreach (var n in new int[2]{ i, j })
            {
                min = (n < min) ? n : min;
                max = (n > max) ? n : max;
            }

            return (max, min);
        }
    }

'워크' 카테고리의 다른 글

UserAgent 가져오기  (0) 2020.07.17
blazor Cookie  (0) 2020.07.15
sessionStorage localStorage  (0) 2020.07.15
blazor MatTab  (0) 2020.07.13
NavigationManager 시트  (0) 2020.07.12