일상적인 문제를 위한 C# 9 팁

반응형

C#에서 사전은 요소 쌍을 연결하기 위한 강력하고 유연한 데이터 구조 역할을 합니다. 이 텍스트에 존재하는 단어의 빈도를 집계하기 위해 사전을 사용하는 것을 고려해 보십시오.

사전의 키는 이 텍스트에서 발견된 개별 단어를 나타내며, 각 단어는 해당 개수에 연결됩니다. 이러한 유형의 구조는 다양한 시나리오에서 매우 유용한 것으로 입증되었습니다. 이제 C#에서 널리 사용되는 몇 가지 사전 작업을 살펴보겠습니다!

두 사전 병합

두 사전을 결합하는 것은 C#에서 데이터 구조로 작업할 때 일반적인 작업입니다. 그러나 사전 병합은 까다로울 수 있으며, 특히 중복 키가 있는 경우 더욱 그렇습니다. 이러한 경우를 처리하기 위한 몇 가지 솔루션은 다음과 같습니다.

Dictionary<string, string> dict1 = new Dictionary<string, string> { { "Superman", "Flight" } };
Dictionary<string, string> dict2 = new Dictionary<string, string> { { "Batman", "Gadgets" } };

// Using LINQ
var merged = dict1.Concat(dict2).ToDictionary(x => x.Key, x => x.Value);

// Using a foreach loop
foreach (var item in dict2)
{
    dict1[item.Key] = item.Value;
}

// Using the Union extension method
var merged2 = dict1.Union(dict2).ToDictionary(x => x.Key, x => x.Value);
 

사전 반전

사전의 키와 값 교환을 고려할 수 있는 시나리오가 있습니까? 이 작업은 특히 고유하지 않은 값이나 해시할 수 없는 값을 처리할 때 복잡할 수 있습니다. 간단한 경우에 대한 몇 가지 솔루션은 다음과 같습니다.

Dictionary<string, string> heroesAbilities = new Dictionary<string, string>
{
    { "Flash", "Super Speed" },
    { "Green Lantern", "Power Ring" },
    { "Aquaman", "Atlantean Strength" }
};

// Inverting the dictionary using LINQ
var inverted = heroesAbilities.ToDictionary(x => x.Value, x => x.Key);

// Inverting the dictionary using a foreach loop
Dictionary<string, string> inverted2 = new Dictionary<string, string>();
foreach (var item in heroesAbilities)
{
    inverted2[item.Value] = item.Key;
}
 

역방향 사전 조회 수행

어떤 경우에는 사전에서 역방향 조회를 수행하고 싶을 수도 있습니다. 즉, 주어진 값을 기반으로 키를 찾고 싶을 수도 있습니다. 이는 사전이 너무 커서 반전할 수 없을 때 유용할 수 있습니다. 이를 달성하는 몇 가지 방법은 다음과 같습니다.

Dictionary<string, int> dimensions = new Dictionary<string, int>
{
    { "length", 10 },
    { "width", 20 },
    { "height", 30 }
};

int valueToFind = 20;

// Brute force solution -- single key
foreach (var item in dimensions)
{
    if (item.Value == valueToFind)
    {
        Console.WriteLine($"{item.Key}: {item.Value}");
        break;
    }
}

// Brute force solution -- multiple keys
foreach (var item in dimensions)
{
    if (item.Value == valueToFind)
    {
        Console.WriteLine($"{item.Key}: {item.Value}");
    }
}

// Using LINQ -- single key
var key = dimensions.FirstOrDefault(x => x.Value == valueToFind).Key;
Console.WriteLine($"{key}: {valueToFind}");

// Using LINQ -- multiple keys
var keys = dimensions.Where(x => x.Value == valueToFind).Select(x => x.Key);
foreach (var k in keys)
{
    Console.WriteLine($"{k}: {valueToFind}");
}
 

위의 코드 조각은 C#에서 역방향 사전 조회를 수행하는 다양한 방법을 보여줍니다. 사전의 크기와 원하는 출력에 따라 사용 사례에 가장 적합한 방법을 선택할 수 있습니다.

입력/출력(4개 조각)

I/O의 빈번한 인스턴스에는 데이터베이스, 파일 및 명령줄 인터페이스와의 상호 작용이 포함됩니다. C#은 I/O 작업을 효과적으로 단순화하지만 특정 복잡성은 여전히 ​​남아 있습니다. 이러한 과제 중 몇 가지를 살펴보겠습니다!

같은 줄에 쓰기

때로는 C# 콘솔 애플리케이션에서 동일한 줄에 작성해야 하는 경우도 있습니다.  Console.Write메서드를 사용하면 문자열 끝에 개행 문자를 추가하지 않고도 이 작업을 수행할 수 있습니다.

Console.Write("The Office");
Console.Write(" Parks and Recreation");
 

C# 스크립트 바로가기 만들기

스크립트를 개발한 후 버튼 클릭만으로 편리하게 스크립트를 실행할 수 있는 방법이 있나요? 다행히도 다양한 방법을 사용하여 이를 달성할 수 있습니다.

한 가지 접근 방식은 후속 코드를 포함하는 배치 파일을 생성하는 것입니다.

@echo off
csc /path/to/MyProgram.cs
MyProgram.exe
 

파일이 존재하는지 확인하기

다행히 C#에서는 쉽습니다. 네임스페이스 는 System.IO파일이 존재하는지 확인하는 등 파일 작업을 위한 일련의 메서드를 제공합니다.

using System.IO;

// Check if file exists using File.Exists method
bool exists = File.Exists("/path/to/file");
 

CSV 파일 구문 분석

C#은 텍스트 파일, CSV 파일 등 다양한 형식의 상당한 양의 원시 데이터를 처리해야 하는 데이터 조작 영역에서 흥미로운 애플리케이션을 제공합니다.

다행히 C#에는 다양한 파일 형식을 처리하기 위한 수많은 기본 제공 도구가 포함되어 있습니다. 예를 들어, CSV 파일을 쉽게 구문 분석할 수 있습니다.

using System;
using System.IO;

// Read all lines from the CSV file
string[] lines = File.ReadAllLines("/path/to/data.csv");

// Process each line
foreach (string line in lines)
{
    // Split the line into fields
    string[] fields = line.Split(',');

    // Do something with the fields, e.g., print them
    Console.WriteLine($"{fields[0]} - {fields[1]} - {fields[2]}");
}
 
반응형