TryGetValue с разделенными словами - PullRequest
0 голосов
/ 29 марта 2012

Привет, я посмотрел перед публикацией и не мог понять, как это сделать, поэтому мне было интересно, может ли кто-нибудь помочь.

По сути, мой код теперь работает следующим образом: если я введу слово в текстовое поле, а затем нажму кнопку, он отобразит разделенное слово из моего словаря в текстовом поле 2.

Например, если мой файл словаря содержит черный, белый , и я ввожу черный в текстовое поле 1, а затем нажимаю кнопку, белый цвет отображается в текстовом поле 2. ... ты меня понимаешь?

Так или иначе, я пытаюсь получить его, поэтому, если я введу строку текста в текстовое поле 1, она скопирует эту строку текста в текстовое поле 2 и изменит слово. Итак

«у моего стула черная подушка» будет переводиться как «у моего стула белая подушка»

private void btnTrans_Click(object sender, EventArgs e)     
{
    string outputString = null;
    if (d.TryGetValue(inputBx.Text, out outputString))      
    {                            
        outputBx.Text = inputBx.Text + outputString;   
    }
    else    
    {                
        outputBx.Text = "Unknown";        
    }
}

Я не уверен, как бы я отредактировал это, чтобы соответствовать моим потребностям, так что любая помощь?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012
var repStr = txtBox.Text;

foreach (var kvp in d)
{
    repStr = repStr.Replace(kvp.Key, kvp.Value);
}

txtBox2.Text = repStr;

Возможно, вы захотите заменить kvp.Key пробелами слева и справа на kvp.Value с пробелами слева и справа, чтобы гарантировать, что вы не замените части слов, или вы можете убедиться, что ключи и значения словаря все дополнено пробелами слева и справа.

со словарем: {"Белый черный"} {"Черный", "Белый"}

Будет проблема, если предложение будет содержать как белое, так и черное.

Альтернативой будет Ответ Джетти .

1 голос
/ 29 марта 2012
string test = txtBox.Text;
StringBuilder sb = new StringBuilder();
Dictionary<string, string> dict = new Dictionary<string, string>();
dict["black"] = "white";
dict["white"] = "black";
string[] chunks = test.Split(' ');
foreach (string s in chunks)
{
  string val;
  if (dict.TryGetValue(s, out val))
  {
    sb.Append(val);
    sb.Append(" ");
  }
  else
  {
    sb.Append(s);
    sb.Append(" ");
  }
}
textBox2.Text = sb.ToString().TrimEnd();

Там немного больше, чем нужно (например, добавление пробелов и затем обрезка, когда вы можете выяснить в цикле, если он в конце или нет), но этого, безусловно, достаточно, чтобы начать и вы может начать оптимизацию, если вам нужно. Примечание: я добавил словарь только для собственного тестирования, чтобы убедиться, что он работает (что он делает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...