프로그래밍/C#

[C#] LINQ 연습하기

Victory_HA 2022. 3. 27. 17:53

LINQ 연습하기

  • Exists
  • ForEach
  • Where
  • Select
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample_TEST
{
    class SampleProgram
    {
        public static void Main(string[] args)
        {
            // list 선언 및 초기화
            var nums = new List<int> { 12, 87, 94, 14, 53, 20, 40, 35, 76, 91, 31, 17, 48 };

            //Q1. LINQ의 Exists 메서드 사용하여, 8, 9로 나누어 떨어지는지 확인 
            if (nums.Exists(x => x % 8 == 0 || x % 9 == 0))
                Console.WriteLine($"8 or 9 로 나누어 떨어지는 수가 있다.");
            else
                Console.WriteLine($"8 or 9 로 나누어 떨어지는 수가 없다.");

            //Q2. LINQ의 ForEach 메서드 사용하여, 2.0으로 나눈 값을 콘솔에 출력
            nums.ForEach(x => Console.WriteLine($"{x / 2.0}"));

            //Q3. LINQ의 Where 메서드 사용하여, 50 이상인 요소를 열거
            nums.Where(x => x > 50).ToList().ForEach(x => Console.WriteLine($"{x}")) ;

            //Q4. LINQ의 Select 메서드 사용하여, 각 값을 2배로 만들고, 결과를 List<int>에 저장 및 출력
            var nums2 = nums.Select(x => x * 2).ToList();
            nums2.ForEach(x => Console.WriteLine($"{x}"));

        }
    }
}

LINQ 연습하기2

  • Max
  • Take
  • ConvertAll
  • OrderBy
  • Distinct
class Program
{
    static void Main(string[] args)
    {
        var nums = new List<int> { 5, 10, 17, 9, 3, 21, 10, 40, 21, 3, 35 };

        // max값 찾기
        var max = nums.Max();

        // 마지막부터 두개 요소 표시
        var two = nums.TakeLast(2).ToList();

        // 각각 숫자값을 문자열로 변환
        var res = nums.ConvertAll(x => x.ToString());

        // 작은순서로 나열, 앞에서 3개 구해서 표시
        var last3 = nums.OrderBy(x => x).Take(3).ToList();

        // 중복 제거, 10보다 큰 값 Count 표시
        var cnt = nums.Distinct().Count(x => x > 10);


        Console.Read();
    }
}

LINQ 연습하기3

  • Where
  • Select
  • First
  • Max
  • OrderByDescending
  • Contains
  • Average
  • Count

Book.cs

class Book
{
    public string Title { get; set; }
    public int Price { get; set; }
    public int Pages { get; set; }
}

main.cs

class Program
{
    static void Main(string[] args)
    {
        var books = new List<Book>
        {
            new Book{Title = "태평천하", Price = 400, Pages = 378},
            new Book{Title = "운수 좋은날", Price = 281, Pages = 212},
            new Book{Title = "만세전", Price = 389, Pages = 201},
            new Book{Title = "삼대", Price = 637, Pages = 464},
            new Book{Title = "상록수", Price = 411, Pages = 276},
            new Book{Title = "혈의누", Price = 961, Pages = 666},
            new Book{Title = "금수회의록", Price = 514, Pages = 268},
        };

        // 제목이 태평천하인 항목의 price, page 출력
        var res1 = books.Where(x => x.Title == "태평천하").ToList();
        Console.WriteLine($"{res1.First().Price},{res1.First().Pages}");

        // '수'가 포함된 항목의 Count
        var count = books.Count(x => x.Title.Contains("수"));

        // '수'가 포함된 항목의 pages의 합의 평균
        var avg = books.Where(x => x.Title.Contains("수")).Average(n => n.Pages);

        // 가격이 400 이상인 항목 중 첫번째 제목 표시
        var firstTitle = books.First(x => x.Price >= 400).Title;

        // 가격이 400 미만인 항목 중 가장 많은 page를 표시
        var maxPage = books.Where(x => x.Price < 400).Max(o => o.Pages);


        // 400page 이상이고, 가격이 비싼순으로 제목,가격을 표시
        var orderDesc = books.Where(x => x.Pages >= 400).OrderByDescending(o => o.Price).ToList();

        // '수'가 포함된 500 page이하인 항목 제목 표시, 여러개인경우 전부 표시
        var res2 = books.Where(x => x.Pages <= 500).ToList();
        res2.ForEach(x => Console.WriteLine(x.Title));

        Console.Read();
    }
}