LINQ의 FirstOrDefault와 함께 KeyValuePair가 있는지 확인하십시오.
유형의 사전이 있습니다.
Dictionary<Guid,int>
조건이 충족되는 첫 번째 인스턴스를 반환하고 싶습니다.
var available = m_AvailableDict.FirstOrDefault(p => p.Value == 0)
그러나 실제로 KeyValuePair를 반환하는지 어떻게 확인합니까? 컴파일러 오류없이! = 또는 ==를 사용하여 default (KeyValuePair)를 확인할 수없는 것 같습니다. 여기 에 해결책이없는 것 같은 유사한 스레드가 있습니다 . 실제로 키를 얻고 Guid의 기본값을 확인하여 내 특정 문제를 해결할 수 있지만 keyvaluepair로이 작업을 수행하는 좋은 방법이 있는지 궁금합니다. 감사
존재에 관심이 있다면 ContainsValue(0)
또는 Any(p => p.Value == 0)
대신 사용할 수 있습니까? 값 으로 검색하는 것은 a Dictionary<,>
; 키로 검색하는 경우 TryGetValue
.
다른 접근 방식 :
var record = data.Where(p => p.Value == 1)
.Select(p => new { Key = p.Key, Value = p.Value })
.FirstOrDefault();
이것은 클래스를 반환합니다 null
. 찾을 수없는 경우에도 마찬가지입니다 .
다음과 같이 변경하는 것이 좋습니다.
var query = m_AvailableDict.Where(p => p.Value == 0).Take(1).ToList();
그런 다음 목록이 비어 있는지 여부를 확인하고 그렇지 않은 경우 첫 번째 값을 취할 수 있습니다.
if (query.Count == 0)
{
// Take action accordingly
}
else
{
Guid key = query[0].Key;
// Use the key
}
사전에 "첫 번째"항목에 대한 실제 개념이 없습니다. 반복되는 순서가 잘 정의되어 있지 않습니다. 해당 값 으로 처음 입력 된 키 / 값 쌍을 얻으려면 일종의 순서 보존 사전이 필요합니다.
(이것은 실제로 키를 알고 싶다고 가정합니다. 존재 확인 직후라면 Marc의 솔루션 이 가장 적합합니다.)
default () 키워드를 사용하십시오.
bool exists = !available.Equals(default(KeyValuePair<Guid, int>));
원하는 것은 Any
일치하는 요소도 제공 하는 방법입니다. 이 방법을 직접 쉽게 작성할 수 있습니다.
public static class IEnumerableExtensions
{
public static bool TryGetFirst<TSource>(this IEnumerable<TSource> source,
Func<TSource, bool> predicate,
out TSource first)
{
foreach (TSource item in source)
{
if (predicate(item))
{
first = item;
return true;
}
}
first = default(TSource);
return false;
}
}
당신은 확인할 수 있습니다
available.Key==Guid.Empty
유형을 지정하지 않고 KeyValuePair와 같은 구조체의 기본값을 확인하는 방법은 Activator를 사용하여 새 인스턴스를 만드는 것입니다.
if (available.Equals(Activator.CreateInstance(available.GetType())))
{
Console.WriteLine("Not Found!");
}
참고 URL : https://stackoverflow.com/questions/793897/check-if-keyvaluepair-exists-with-linqs-firstordefault
'program tip' 카테고리의 다른 글
사용자 정의 필터에서 Java 구성을 사용하여 AuthenticationManager를 삽입하는 방법 (0) | 2020.10.29 |
---|---|
ASP.NET Core에서 IPrincipal 모의 (0) | 2020.10.29 |
어셈블리없는 C / C ++ 함수 정의 (0) | 2020.10.29 |
ARC가 활성화 된 UUID 문자열 생성 (0) | 2020.10.29 |
두 목록을 JUnit 테스트하는 방법 (0) | 2020.10.29 |