Привет всем Я имею небольшую функцию, которая хранит символы в строке в словаре. Строка может содержать строчные и строчные буквы одновременно, и я хотел сохранить все символы в нижнем регистре или в верхнем регистре. В основном, я хочу, чтобы словарь обрабатывал «T» и «t» как один и тот же ключ. Ниже мой код.Нижняя оболочка C# строка
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;
}
Теперь я пытался сделать несколько вещей здесь, как преобразование входной строки в нижний регистр как один из способов или нижний регистр каждого символа внутри для цикла.
Первый способ нижнего корпуса: строка отлично работает, но я изменяю неизменяемый строковый объект, поэтому не может быть эффективным способом. Мой второй способ работает, но я не уверен, что он эффективен в случае большой строки.
Любые комментарии по поводу того, что мой словарь нечувствителен или нижний обрезной шнур наиболее эффективным способом?
S наверху, и прежде чем использовать «ToLower», перейдите и прочитайте http://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/ и https : //blog.codinghorror.com/whats-wrong-with-turkey/ –
Вам нужно будет сделать 'c = char.ToLower (c);' для этого работать. – juharr