Как я могу получить правильное значение из хэширования <string>? - PullRequest
1 голос
/ 27 января 2012

У меня есть HashSet<string>, который создается с использованием StringComparer.CurrentCultureIgnoreCase, и я широко использую .Contains (строковый ввод) для проверки ввода пользователя. Если пользователь вводит значение в неправильном регистре, .Contains = true, что правильно, но мне нужно также исправить регистр; например, если пользователь запрашивает myvalue, а MyValue находится в хэш-наборе. Какой самый эффективный способ также вернуть MyValue, чтобы вводимые пользователем данные были скорректированы с учетом регистра?

Вот примерный пример того, что я имею в виду:

    static HashSet<string> testHS = new HashSet<string>(StringComparer.CurrentCulture);
    static bool InputExists(string input, out string correctedCaseString)
    {
        correctedCaseString = input;
        if (testHS.Contains(input))
        {
            // correctedCaseString = some query result of the cased testHS value?
            return true;
        }
        return false;
    }

1 Ответ

3 голосов
/ 27 января 2012

Вы можете использовать словарь вместо HashSet. Сопоставьте строку с самим собой и используйте регистр равенства без учета регистра (http://msdn.microsoft.com/en-us/library/ms132072.aspx). Ваш код становится примерно таким:

static Dictionary<string, string> testD = new Dictionary<string, string>(StringComparer.CurrentCulture);
static bool InputExists(string input, out string correctedCaseString)
{
    correctedCaseString = input;
    if (testD.ContainsKey(input))
    {
        correctedCaseString = testD[input];
        return true;
    }
    return false;
}
...