Лучший способ заменить символы в строке из Hashtable? - PullRequest
1 голос
/ 27 октября 2010

У меня есть метод, который получает строку и Hashtable ... хеш содержит символ, который должен быть заменен в ключе, и значение, которое вместо этого используется как значение.Каков наилучший способ проверить хэш и заменить символы в строке?

Спасибо:)

Ответы [ 3 ]

3 голосов
/ 27 октября 2010
foreach(var pair in hash)
{
    mystring = mystring.Replace(pair.Key, pair.Value);
}

Если это действительно Hashtable, а не Dictionary<char, char>, то вам может потребоваться привести ключ и значение к правильному типу.

В качестве альтернативы, в зависимости от количества элементов в вашемсловарь и размер вашей строки, это может быть быстрее, чтобы перебрать строку:

StringBuilder sb = new StringBuilder();
foreach (var char in mystring)
{
    char replace;
    if (hash.TryGetValue(char, out replace))
    {
        sb.Append(replace);
    }
    else
    {
        sb.Append(char);
    }
}
1 голос
/ 27 октября 2010

Вам следует перебрать строку и использовать текущий символ, чтобы получить значение замены из хеш-таблицы.Это даст вам скорость O (n).

0 голосов
/ 27 октября 2010

Что насчет маленького лямбда-выражения?

var t = new Dictionary<char, char>();
t.Add('T', 'B');
var s = "Test";
s = string.Concat(s.Select(c => { return t.ContainsKey(c) ? t[c] : c ; }));
Console.WriteLine(s);

Избегайте двойного поиска:

var t = new Dictionary<char, char>();
t.Add('T', 'B');
var s = "Test";
s = string.Concat(s.Select(c => 
    {
        char r;
        if(t.TryGetValue(c, out r))
            return r;
        else
            return c; 
    }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...