小写 C# 字符串

Lower casing C# string

大家好,我有一个小函数,可以将字符串中的字符存储到字典中。该字符串可以同时包含小写和大写字母,我想以小写或大写形式存储所有字符。基本上我希望字典将 'T' 和 't' 视为相同的键。下面是我的代码。

public bool CheckCharOddCount(string str1)
{
  bool isOdd = false;
  Dictionary<char, int> dt = new Dictionary<char, int>();

  // Dictionary is case sensitive so 'T' and 't' are treated as different keys.       
  str1 = str1.ToLower();  # One way 
  foreach (char c in str1) 
  {
    c = char.ToLower(c);      # Another way
    if (dt.ContainsKey(c))
      dt[c]++;
    else
      dt.Add(c, 1);
  }

  foreach (var item in dt)
  {
    if (item.Value % 2 == 1)
    {
      if (isOdd)
        return false;
      isOdd = true;
    }
  }

  return true;
}

现在我尝试在这里做几件事,比如将输入字符串转换为小写作为一种方式或将 for 循环中的每个字符小写。

字符串小写的第一种方法工作正常,但我正在修改不可变字符串对象,因此可能不是有效的方法。我的第二种方法有效,但我不确定在大字符串的情况下这是否有效。

关于使我的字典不区分大小写或以最有效的方式对字符串进行小写的任何评论?

要创建不区分大小写的键字典,请使用适当的 constructor

Dictionary<string, int> dictionary = new Dictionary<string, int>(
        StringComparer.CurrentCultureIgnoreCase);

如果您只处理英语,这个 oneliner 可以胜任:

string s = "AaaaAcWhatever";
Dictionary<char, int> dic = s.GroupBy(c => char.ToLower(c))
                             .Select(g => new { Key = g.Key, Count = g.Count()})
                             .ToDictionary(x => x.Key.First(), x => x.Count);

输出:

Count = 8
[0]: {[a, 6]}
[1]: {[c, 1]}
[2]: {[w, 1]}
[3]: {[h, 1]}
[4]: {[t, 1]}
[5]: {[e, 2]}
[6]: {[v, 1]}
[7]: {[r, 1]}