У меня было интересное обсуждение с коллегой о хеш-функции недавно. Наши заключения были следующие:
, Если действительно необходимо записать хорошую хеш-функцию, которая минимизирует коллизии больше, чем реализации по умолчанию, доступные на стандартных языках, Вам нужна ученая степень в области математики.
, Если Вы пишете приложения, где пользовательская хеш-функция заметно улучшит производительность Вашего приложения, Вы - Google, и у Вас есть много Математики PhDs, чтобы сделать работу.
Извините к не непосредственно отвечают на Ваш вопрос, но нижняя строка - то, что нет действительно никакой потребности записать Вашу собственную хеш-функцию для Строки. С каким языком Вы работаете? Я предположил бы, что существует простой способ вычислить "достаточно хороший" хэш-код.
MSDN: TextInfo.ToTitleCase
Убедитесь, что вы включили: using System.Globalization
string title = "war and peace";
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //War And Peace
//When text is ALL UPPERCASE...
title = "WAR AND PEACE" ;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //WAR AND PEACE
//You need to call ToLower to make it work
title = textInfo.ToTitleCase(title.ToLower());
Console.WriteLine(title) ; //War And Peace
Попробуйте следующее:
string myText = "a Simple string";
string asTitleCase =
System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
ToTitleCase(myText.ToLower());
Как уже указывалось, использование TextInfo.ToTitleCase может не дать вам точных результатов, которые вы хотите. Если вам нужен больший контроль над выводом, вы можете сделать что-то вроде этого:
IEnumerable<char> CharsToTitleCase(string s)
{
bool newWord = true;
foreach(char c in s)
{
if(newWord) { yield return Char.ToUpper(c); newWord = false; }
else yield return Char.ToLower(c);
if(c==' ') newWord = true;
}
}
А затем использовать его так:
var asTitleCase = new string( CharsToTitleCase(myText).ToArray() );