C# 목록을 사전 으로 변환
이것은 하기에 이상하게 보일 수 있지만 그것을 무시하고, 그것을 변환하는 좋은 간결한 방법이 있습니까?List<string>
로.Dictionary<string, string>
여기서 사전의 각 키 값 쌍은 목록의 각 문자열입니다.
List = string1, string2, string3
Dictionary = string1/string1, string2/string2, string3/string3
저는 많은 검색을 해봤고, 말 그대로 반대 방향으로 하는 스택 오버플로에만 수십 개의 예가 있습니다.
이 작업을 수행하는 이유는 3분의 2 부품을 가지고 있기 때문에 변경할 수 없습니다.하나는 이메일 주소 목록을 다음과 같이 반환합니다.List<string>
수신인 매개 변수가 다음과 같은 전자 메일을 보냅니다.Dictionary<string, string>
사전의 키는 이메일 주소이고 값은 실제 이름입니다.하지만 저는 실명은 모르지만 이메일 주소로 실명을 설정하면 여전히 작동합니다.따라서 목록을 다음으로 변환하려는 이유Dictionary<string, string>
이것을 하는 방법은 많이 있습니다.aforeach
사전에 kvp를 추가하는 목록의 루프.하지만 저는 테르스 코드를 좋아해서 단일 라인 솔루션이 있는지 궁금했습니다.
사용해 보십시오.
var res = list.ToDictionary(x => x, x => x);
첫 번째 람다는 키를 선택하고 두 번째 람다는 값을 선택할 수 있습니다.
키를 사용하여 다음과 같이 키와 값을 다르게 설정할 수 있습니다.
var res = list.ToDictionary(x => x, x => string.Format("Val: {0}", x));
목록에 중복 항목이 있는 경우 추가Distinct()
다음과 같이:
var res = list.Distinct().ToDictionary(x => x, x => x);
편집 타당한 이유에 대해 언급하자면, 이러한 변환에 대해 유효할 수 있는 유일한 이유는 어느 시점에서 키와 결과 사전의 값이 분산되기 때문이라고 생각합니다.예를 들어 초기 변환을 수행한 다음 일부 값을 다른 값으로 바꿉니다.키와 값이 항상 같다면,HashSet<String>
사용자의 상황에 훨씬 더 적합합니다.
var res = new HashSet<string>(list);
if (res.Contains("string1")) ...
사용:
var dict = list.ToDictionary(x => x);
자세한 내용은 MSDN을 참조하십시오.
Pranay가 코멘트에서 지적했듯이, 목록에 항목이 여러 번 존재하면 이 작업은 실패합니다.
특정 요구 사항에 따라 다음 중 하나를 사용할 수 있습니다.var dict = list.Distinct().ToDictionary(x => x);
구별되는 항목의 사전을 구하거나 사용할 수 있습니다.ToLookup
대신:
var dict = list.ToLookup(x => x);
이 옵션은 다음을 반환됩니다.ILookup<string, string>
그것은 본질적으로 와 같습니다.IDictionary<string, IEnumerable<string>>
따라서 각 문자열 인스턴스가 아래에 있는 고유한 키 목록이 표시됩니다.
편집
중복을 처리하는 또 다른 방법은 이렇게 할 수 있다는 것입니다.
var dic = slist.Select((element, index)=> new{element,index} )
.ToDictionary(ele=>ele.index.ToString(), ele=>ele.element);
또는
하기 쉬운 방법은
var res = list.ToDictionary(str => str, str=> str);
그러나 반복되는 문자열이 없는지 확인하십시오. 그렇지 않으면 위의 코드가 작동하지 않습니다.
이렇게 하는 것보다 끈이 반복되는 경우.
Dictionary<string,string> dic= new Dictionary<string,string> ();
foreach(string s in Stringlist)
{
if(!dic.ContainsKey(s))
{
// dic.Add( value to dictionary
}
}
사용:
var dictionary = list.ToDictionary(s => s);
문자열이 반복될 수 있는 경우 목록에서 먼저 호출을 수행하거나(중복 제거) 키당 여러 개의 값을 허용하는 사용하십시오.
사용할 수 있는 항목:
var dictionary = myList.ToDictionary(x => x);
언급URL : https://stackoverflow.com/questions/11581101/c-sharp-convert-liststring-to-dictionarystring-string
'programing' 카테고리의 다른 글
Blob Storage Azure에 단일 파일 업로드 (0) | 2023.05.06 |
---|---|
Swift에서 빈 문자열을 확인하시겠습니까? (0) | 2023.05.06 |
Bash 명령의 출력을 변수에 할당하는 방법은 무엇입니까? (0) | 2023.05.06 |
효율적인 페이징 구현 방법 (0) | 2023.05.06 |
Xcode iOS 8 키보드 유형이 지원되지 않음 (0) | 2023.05.06 |