'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);