'a'에서 'z'의 목록을 얻는 방법? [닫은]

Nov 14 2020

입력 문자열에서 알파벳으로 각 문자가 나타나는 수를 세고 싶은 코드가 있습니다. 나는 dictionary <char, int>를 사용하여 각 문자에 대한 키와 출현 횟수로 값을 갖습니다. 그렇다면 'a'에서 'z'까지의 목록을 키로 사용하는 방법은 무엇입니까? 나는 이것을 시도했다 :

Dictionary<char, int> alphabetCounter = new Dictionary<char, int>();
for (char ch = 'a'; ch <= 'z'; ch++)
    alphabetCounter[ch] = 0;

'a'에서 'z'까지 목록을 갖는 것이 더 좋은 방법입니까? 감사합니다.

답변

4 J.F. Nov 14 2020 at 04:29

Linq이것을 사용하여 "a"에서 "z"까지의 목록을 가지십시오.

var list = Enumerable.Range('a', 'z' - 'a' + 1).Select(c => (char)c).ToList();

대문자로하고 싶다면 동일하지만 대문자를 사용합니다.

var list = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => (char)c).ToList();

편집하다:

귀하의 질문은 목록을 가져 오는 것이지만 사전으로 가져 오려면 .ToDictionary()값 0으로 사용 하고 초기화 할 수 있습니다 .

var dictionary = Enumerable.Range('a', 'z' - 'a' + 1).Select(c => (char)c).ToDictionary(i => (char)i, i => 0);

대문자 / 소문자도 동일합니다.

3 BrunoMiquelin Nov 14 2020 at 04:32

성능이 중요합니까? 간단하게 유지할 수 있습니다.
자신의 사전을 만들고 모든 가능성을 등록한 다음 counter[i]++각 발생에 대해 시작할 필요가 없습니다.

.GroupBy(System.Linq) 를 사용하여 문자를 그룹화 한 다음 각 발생 횟수를 확인할 수 있습니다.

예:

var word = "test";
var groupedLetters = word.GroupBy(x => x);

foreach(var letter in groupedLetters)
{
    Console.WriteLine($"{letter.Key} - {letter.Count()}");
}

산출:

t - 2  
e - 1  
s - 1
2 Haytam Nov 14 2020 at 04:26

LINQ에서 수행하는 방법은 다음과 같습니다.

var alphabetCounter = Enumerable.Range(97, 26).ToDictionary(i => (char)i, i => 0);

이렇게하면 값이 0 인 모든 문자가 포함 된 사전이 생성됩니다.

알파벳 (소문자)의 ASCII 코드는 97에서 시작합니다. 그런 다음 여기에서 26 개의 숫자를 가져 와서 char.

1 XDev Nov 14 2020 at 04:45

안녕하세요,이 예제가 도움이 될 것입니다.

List<char> LS = new List<char>() {'A', 'B', 'C', 'D', 'A', 'D', 'B', 'A'};
Dictionary<char,int> AlphaDictionary = (from x in LS group x by x).Select(x => new {Alpha = x.Key, Count = x.Count()}).ToDictionary(x=>x.Alpha,x=>x.Count);