Dictionary에서 특정 key, value의 데이터를 찾아서 가져오는 방법을 소개합니다.
1. FirstOrDefault()를 이용한 방법
1.1 key로 value 가져오기
FirstOrDefault(function)
는 함수 조건에 가장 먼저 만족하는 key-value
쌍을 KeyValuePair 타입으로 리턴합니다. KeyValuePair에서 key와 value를 가져올 수 있습니다.
아래와 같이 특정 key에 대해서 key-value 값을 가져올 수 있습니다. 만약 key가 존재하지 않으면 타입의 기본 값이 리턴됩니다.
namespace Example {
public class Program {
public static void Main(string[] args) {
Dictionary<string, int> dict = new Dictionary<string, int>()
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
string keyToGet = "two";
var result = dict.FirstOrDefault(kvp => kvp.Key.Equals(keyToGet));
Console.WriteLine(result.Key);
Console.WriteLine(result.Value);
}
}
}
Output:
two
2
1.2 value로 데이터 가져오기
아래와 같이 특정 조건의 value를 찾아서 key-value
데이터를 가져올 수 있습니다. 다수의 value가 조건을 충족해도 하나만 가져옵니다.
namespace Example {
public class Program {
public static void Main(string[] args) {
Dictionary<string, int> dict = new Dictionary<string, int>()
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
var result = dict.FirstOrDefault(kvp => kvp.Value >= 1);
Console.WriteLine(result.Key);
Console.WriteLine(result.Value);
}
}
}
Output:
one
1
2. Where()를 이용한 방법
Dictionary.Where(function)
은 인자로 전달된 함수를 충족하는 KeyValuePair들을 Enumerable 타입으로 리턴합니다.
아래 예제는 key가 two인 데이터를 찾고, 그 key를 Enumerable로 리턴하는 예제입니다. 동일한 key가 하나만 있기 때문에 최대 1개의 데이터만 리턴됩니다.
namespace Example {
public class Program {
public static void Main(string[] args) {
Dictionary<string, int> dict = new Dictionary<string, int>()
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
string keyToGet = "two";
var keys = dict.Where(kvp => kvp.Key.Equals(keyToGet)).Select(kvp => kvp.Key);
Console.WriteLine(String.Join(", ", keys));
}
}
}
Output:
two
만약 key-value 쌍을 딕셔너리로 리턴 받고 싶을 때는 아래와 같이 ToDictionary()
를 사용하여 구현할 수 있습니다.
namespace Example {
public class Program {
public static void Main(string[] args) {
Dictionary<string, int> dict = new Dictionary<string, int>()
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
string keyToGet = "two";
var result = dict.Where(kvp => kvp.Key.Equals(keyToGet))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Console.WriteLine(String.Join(", ", result));
}
}
}
Output:
[two, 2]
위의 예제들은 key의 조건으로 데이터를 찾았는데, value에 대해서 찾도록 구현할 수 있습니다.
3. for문을 이용한 방법
foreach로 딕셔너리의 모든 데이터를 순회하면서, 특정 key 또는 value 조건을 만족하는 데이터만 리스트에 추가할 수 있습니다.
namespace Example {
public class Program {
public static void Main(string[] args) {
Dictionary<string, int> dict = new Dictionary<string, int>()
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
var result = new List<KeyValuePair<string, int>>();
foreach (KeyValuePair<string, int> entry in dict) {
if (entry.Value >= 2) {
result.Add(entry);
}
}
System.Console.WriteLine(string.Join(", ", result));
}
}
}
Output:
[two, 2], [three, 3]
Related Posts
- C# 바이트(Byte) 배열을 문자열로 변환
- C# String.format() 함수 알아보기
- C# - foreach (Array, List, Dictionary)
- C# 프로퍼티(Property) Get/Set 함수
- C# - Dictionary에서 key, value 가져오기
- C# - Dictionary 순회, foreach, for 루프
- C# - Dictionary에서 key, value 삭제
- C# - Dictionary.add()로 데이터 추가
- C# - Dictionary 선언 및 초기화
- C# - 문자열을 Double, Float으로 변환
- C# - 문자열을 리스트로 변환
- C# - 두 날짜/시간 비교, DateTime.Compare()
- C# - 날짜 계산, DateTime 시간 더하기 빼기
- C# - 날짜 문자열을 DateTime으로 변환
- C# - Sleep, 몇 초간 지연시키기
- C# - Timestamp(millisecond)를 DateTime 객체로 변환
- C# - 현재 시간 가져오기, DateTime
- C# - 문자열 리스트를 문자열로 변환
- C# - 리스트 복사 (얕은 복사, 깊은 복사)
- C# - 2차원 리스트 선언 및 초기화
- C# - 리스트 선언 및 초기화
- C# - 리스트 길이, 크기 가져오기
- C# - 리스트 합계, 평균 계산
- C# - 리스트 요소 제거 (RemoveAt, RemoveAt, RemoveAll)
- C# - 리스트에서 빈 문자열, null 제거
- C# - 리스트 두개로 분리, n개로 나누기
- C# - 문자열 뒤집기, Reverse()
- C# - 2차원 배열 복사, Clone
- C# - 문자열 배열을 문자열로 변환
- C# - 2차원 배열 선언, 초기화 방법
- C# - 배열 길이, 2차원 배열 길이
- C# - 두개의 배열을 하나로 합치기
- C# - 배열 중복 요소 제거
- C# - 배열에서 특정 요소 제거
- C# - Int 배열 정렬 (오름차순, 내림차순)