添加&;增加C#字典中的键和值

添加&;增加C#字典中的键和值,c#,dictionary,key-value,C#,Dictionary,Key Value,我正在创建一个计数器,它计算字符串中每个字符出现的次数,然后将结果打印到控制台 让我们使用以下示例字符串: string myString = "The pen is mightier." 我希望结果是正确的 T : 2 h : 2 e : 3 : 2 p : 1 n : 1 i : 3 s : 1 m : 1 g : 1 r : 1 . : 1 我已将字符串转换为字符数组 char[] charactersInString = myString.ToCharArra

我正在创建一个计数器,它计算字符串中每个字符出现的次数,然后将结果打印到控制台

让我们使用以下示例字符串:

string myString = "The pen is mightier."
我希望结果是正确的

T : 2
h : 2
e : 3
  : 2
p : 1
n : 1
i : 3
s : 1
m : 1
g : 1
r : 1
. : 1
我已将字符串转换为字符数组

char[] charactersInString = myString.ToCharArray();
我已经创建了一本存储字母和计数的字典

Dictionary<char, int> letters = new Dictionary<char, int>();
字典字母=新字典();
我循环查看
characteristing
数组中的每个字母,不确定当字典不包含键时如何初始化和添加新的对,或者仅当字典包含键时如何更新值?

使用LINQ非常简单

var dictionary = myString.GroupBy( x => x ).ToDictionary( x => x.Key, x => x.Count );
如果要将小写和大写计数相同,请事先将字符串强制为大写:

var dictionary = myString.ToUpper().GroupBy( x => x ).ToDictionary( x => x.Key, x => x.Count );
如果你想用传统的方法,你需要一个循环

var dictionary = new Dictionary<char,int>();
foreach (var character in myString.ToUpper())
{
    if (dictionary.ContainsKey(character)) 
    {
        dictionary[character]++;
    }
    else
    {
        dictionary.Add(character, 1);
    }
}
var dictionary=newdictionary();
foreach(myString.ToUpper()中的var字符)
{
if(字典.ContainsKey(字符))
{
字典[字符]+;
}
其他的
{
添加(字符,1);
}
}

dictionary有一个ContainsKey函数来检查值是否存在,还有一个add函数来添加。。记住在1处初始化,因为一旦你到了那里,你就发现了第一个出现:)还要注意字符串同时有'T'和'T',并且你将它们计算为相同的数-但是期望第一个出现在字典中-所以你应该检查(ContainsKey(char.ToUpper())| ContainsKey(char.ToLower())…这将把'T'和'T'计算为两个不同的键。。预期结果是“T”:2这将把所有值作为大写字母相加,对于它们发布的内容(添加最先出现的内容),我认为您需要检查两个键选项(ContainsKey(char.ToUpper())| | ContainsKey(char.ToLower())@audzzy我认为您推断出了一个要求,即字典键通过其大小写,表示字母第一次出现的情况,后续出现的情况在同一个存储桶中计数,无论大小写如何。这似乎不是一个有用的要求;事实上,这使得字典很难使用,因为为了获得特定字母的计数,您必须提前知道其大小写,或者尝试检索计数两次。我不同意这是一个更好的答案。我不是问这个问题的人-我不知道用例,但如果所需的结果是帖子中的结果(他们实际上费心将t大写),那么我认为这是一个差异,至少应该引起注意。。即使只是为了练习c#也应该处理区分大小写的问题:)它用关键字符增加条目的值,比如写:dictionary[character]=dictionary[character]+1;