我正在做一个翻译,你正在用俄语写一篇巨大的文本,而它是用英语写的。示例:“ghbdtn” - “hello” 一切正常,但如果您输入带有数字或符号的文本,它们不会显示在输出中。当点击该按钮时,会出现以下代码:
char[] translateChar = englishText.Text.ToCharArray();
Hashtable hashTbEngRus = new Hashtable
{
// Здесь хранится ключ в виде английских букв и значение в русских.
};
ICollection key = hashTbEngRus.Keys;
for (int i = 0; i < translateChar.Length; i++)
{
foreach (char lengthKey in key)
{
if (lengthKey == translateChar[i])
{
russianText.Text += englishText.Text.Replace(translateChar[i].ToString(), hashTbEngRus[lengthKey].ToString())[i];
break;
}
}
}
我检查了很多选项但找不到解决方案,问题是 foreach 循环会遍历整个键,如果添加
else russianText.Text += translateChar[i];
它会重复输出数组的每个元素,直到找到相等的元素,这就是为什么输出结果完全是垃圾。也许这里不值得使用哈希表,或者除了添加所有符号、数字和俄语字母之外还有其他解决方案吗?预先感谢您的答复。
使用通用集合,但他们没有显示所有代码,但徒劳无功。
就是这样。
Dictionary都是一样的,Hashtable只是更新、更快、更方便。StringBuilder这里使用是为了性能和节省内存,它比字符串连接效率高得多。如果您需要粘合和剪切很多线条,请使用它,例如这里。text.Length在构造函数中,SB表示构建器内部存储的初始容量;没有必要指定,但如果您事先知道结果将是多长时间,则很有用。我希望弄清楚三元运算符不会很困难
?:。如果它真的很复杂,那么循环体就更简单,它做同样的事情。
唯一的区别是,
TryGetValue它在一次传递中检查键是否存在,如果有,则立即获取值,但这里我们首先搜索检查,然后第二次通过索引器获取符号。也就是说,这段代码慢了 2 倍,但对于短行来说没有什么区别。