아두맨 아이디어 창작소

아두맨

아이디어 창작 도우미

    코딩/C#

    [C#] 2중 리스트 사용하는 방법

    아두맨 2023. 4. 2. 14:17
    반응형

    폴더 안에 파일을 정리하듯 2중 리스트로 데이터 정리하는 방법


     

    ⭕ 코드 예제

    함수 선언은 List<list< t="">> 형태다. (T는 string, char, int 등 자료형)

     

    소문자 알파벳 리스트 데이터를 2중 리스트 안에 순서대로 대문자 알파벳 변환하여 저장하는 예제코드

     

    List<List<char>> upperData = new List<List<char>>();
    List<char> subData = new List<char>();
    
    string dataLow = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
    
    string[] calcLow = dataLow.Split(',');      // 소문자 알파벳 string을 콤마로 
                                                // 구분하여 string[] 배열로 저장
    
    Console.Write("subData  : ");
    
    for (int i = 0; i < calcLow.Length; i++)
    {
        char ch = calcLow[i][0];                 // string[] 배열로 저장된 알파벳 char로 변환
        subData.Add(ch);                         // List subData에 알파벳을 추가 
                                                 // subData[26] 리스트가 만들어짐
        Console.Write(subData[i] + " ");
    }
    
    Console.WriteLine("\r\n\r\n upperData ");
    
    for (int i = 0; i < calcLow.Length; i++)    // a~z 까지 알파벳 하나만 대문자로 바꾸어서 
                                                // 2중 리스트에 값을 저장하는 반복문
    {
        List<char> calcData = new List<char>(); // List의 값을 계산하기 위한 임시 List 생성
        calcData.AddRange(subData);             // 임시 List값에 소문자 알파벳 저장한 리스트 복사    					
        calcData[i] = char.ToUpper(calcData[i]);// i 번째에 해당하는 소문자를 대문자로 변경
        upperData.Add(calcData);                // i 번째에 소문자를 대문자로 바꾼 List값을 
                                                // List<List> 2중 리스트에 전체 복사 upperData[0][26]
        Console.Write("upperData[{0}] : ", i);
        for (int j = 0; j < upperData[i].Count; j++)
        {
            Console.Write(upperData[i][j] + " ", i);
        }
        Console.WriteLine("");
    }

     

    1. List<List<char>> 타입의 upperData와 List<char> 타입의 subData를 선언 및 초기화한다.


    2. string 타입의 dataLow 변수에 소문자 알파벳 문자열을 저장한다. string[] 타입의 calcLow 변수에 Split() 메서드를 이용하여 dataLow 문자열을 콤마로 구분하여 각 알파벳을 배열의 요소로 저장한다.


    3. for 반복문을 이용하여 calcLow 배열의 요소 수만큼 반복한다. 각 요소마다 소문자 알파벳을 char 타입으로 변환하여 subData 리스트에 추가한다. subData 리스트의 각 요소를 출력한다.

    4. for 반복문을 이용하여 calcLow 배열의 요소 수만큼 반복한다. List<char> 타입의 calcData 변수를 선언하여 subData 리스트의 값들을 복사한다. calcData 리스트에서 i번째 요소를 대문자로 변환한다. upperData 리스트에 calcData 리스트를 추가한다. upperData 리스트의 각 요소를 출력한다. 각 요소는 char 리스트 타입이므로 이중 반복문을
    사용하여 출력한다.


    🍺 출력 결과
    subData  : a b c d e f g h i j k l m n o p q r s t u v w x y z
    
     upperData
    upperData[0] : A b c d e f g h i j k l m n o p q r s t u v w x y z
    upperData[1] : a B c d e f g h i j k l m n o p q r s t u v w x y z
    upperData[2] : a b C d e f g h i j k l m n o p q r s t u v w x y z
    upperData[3] : a b c D e f g h i j k l m n o p q r s t u v w x y z
    upperData[4] : a b c d E f g h i j k l m n o p q r s t u v w x y z
    upperData[5] : a b c d e F g h i j k l m n o p q r s t u v w x y z
    upperData[6] : a b c d e f G h i j k l m n o p q r s t u v w x y z
    upperData[7] : a b c d e f g H i j k l m n o p q r s t u v w x y z
    upperData[8] : a b c d e f g h I j k l m n o p q r s t u v w x y z
    upperData[9] : a b c d e f g h i J k l m n o p q r s t u v w x y z
    upperData[10] : a b c d e f g h i j K l m n o p q r s t u v w x y z
    upperData[11] : a b c d e f g h i j k L m n o p q r s t u v w x y z
    upperData[12] : a b c d e f g h i j k l M n o p q r s t u v w x y z
    upperData[13] : a b c d e f g h i j k l m N o p q r s t u v w x y z
    upperData[14] : a b c d e f g h i j k l m n O p q r s t u v w x y z
    upperData[15] : a b c d e f g h i j k l m n o P q r s t u v w x y z
    upperData[16] : a b c d e f g h i j k l m n o p Q r s t u v w x y z
    upperData[17] : a b c d e f g h i j k l m n o p q R s t u v w x y z
    upperData[18] : a b c d e f g h i j k l m n o p q r S t u v w x y z
    upperData[19] : a b c d e f g h i j k l m n o p q r s T u v w x y z
    upperData[20] : a b c d e f g h i j k l m n o p q r s t U v w x y z
    upperData[21] : a b c d e f g h i j k l m n o p q r s t u V w x y z
    upperData[22] : a b c d e f g h i j k l m n o p q r s t u v W x y z
    upperData[23] : a b c d e f g h i j k l m n o p q r s t u v w X y z
    upperData[24] : a b c d e f g h i j k l m n o p q r s t u v w x Y z
    upperData[25] : a b c d e f g h i j k l m n o p q r s t u v w x y Z

     


    ⭕ 사용한 코드 예제

    날짜별로 데이터를 나누어 저장할 때 사용했다

    using (FileStream fs = new FileStream(searchPath, FileMode.Open))
    {
        using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default, false))
        {
            List<string> dateDay = new List<string>();
            string lines = null; 
            List<string> datetp = new List<string>();
            dateDay.Add(Path.GetFileName(searchPath));
            trData.Add(dateDay);				// 2중 List에 데이터 저장
            while ((lines = sr.ReadLine()) != null)
            {
                if (string.IsNullOrEmpty(lines)) return;
                datetp.Add(lines);             // 파일마다 데이터들을 datetp List 안에 값 저장
            }
            dateDay.AddRange(datetp);          
            datetp.Clear();
        }
    }

     

    위 코드는 파일 경로 searchPath에 있는 파일을 열어서, 각 파일의 이름과 파일 안의 데이터를 trData라는 2중 리스트에 저장하는 코드입니다.

    먼저 FileStream과 StreamReader를 사용하여 searchPath의 파일을 열고, 파일 안의 각 라인을 읽어옵니다. 각 파일의 이름을 저장하기 위해 dateDay라는 List<string>을 생성하고, Path.GetFileName() 함수를 사용하여 파일 이름을 구하고 dateDay에 추가합니다. 그리고 trData에 dateDay를 추가하여 2중 리스트에 파일 이름을 저장합니다.

    그리고 while문을 사용하여 파일 내의 모든 라인을 읽어옵니다. 만약 읽어온 라인이 null이거나 빈 문자열이라면 함수를 빠져나오게 됩니다. 그렇지 않다면, datetp라는 List<string>에 읽어온 라인을 추가합니다. 각 파일의 데이터들을 모두 datetp에 저장한 후, dateDay.AddRange(datetp)를 사용하여 파일 이름과 데이터를 함께 dateDay에 추가합니다. 그리고 datetp를 비워줍니다.

     


    🍺 사용한 코드 출력 결과

    날짜별로 데이터가 2중 리스트안에 저장하여 분류된 결과


    🌲 생각

    .csv 파일안에 각각의 데이터들을 정렬하거나 추출할 때 사용하니 편했다

     

    반응형

    '코딩 > C#' 카테고리의 다른 글

    [C#] 엑셀처럼 정렬하기 나머지 행들을 같이 정렬하는 방법  (0) 2023.04.02
    [C#] .csv 파일 읽기 쓰기  (0) 2023.04.02
    [C#] string 특정 문자 포함 합치기 [string.Join()]  (0) 2023.04.02
    [C#] List 데이터 정렬 하는 방법  (0) 2023.04.02
    [C#] C#에서 전기자동차 충전소 정보 API를 활용하는 방법  (0) 2023.04.01

    '코딩/C#'의 다른글

    • 현재글[C#] 2중 리스트 사용하는 방법

    관련글

    • [C#] 엑셀처럼 정렬하기 나머지 행들을 같이 정렬하는 방법 2023.04.02
    • [C#] .csv 파일 읽기 쓰기 2023.04.02
    • [C#] string 특정 문자 포함 합치기 [string.Join()] 2023.04.02
    • [C#] List 데이터 정렬 하는 방법 2023.04.02
    프로필사진

    아이디어를 실현시켜드립니다!

    • 최신글 전체보기 (29)
      • 코딩 (10)
        • Python (4)
        • C# (6)
      • ESP32 (12)
        • 장치설정 (9)
        • 센서활용 (2)
        • ESP32 프로젝트 (1)
      • 아두이노 (4)
        • 장치설정 (3)
        • 아두이노 프로젝트 (1)
      • 라즈베리파이 (1)
        • 라즈베리파이 프로젝트 (1)
      • 블로그 관련 (1)

    최근글과 인기글

    • 최근글
    • 인기글

    공지사항

    Tag

    아두이노, Arduino, deepsleep, 데이터, 2중 리스트, wokwi, LED, 2중리스트, 개발, 시제품, st7789, 전력관리, c#, 딥슬립, 아두이노 딥슬립, 의뢰, 웹, 라즈베리파이, ESP32, 아두맨,

    최근댓글

    Copyright 아두맨. All rights reserved.

    티스토리툴바