如果输入与定义相匹配,那么接受输入、对照字典以及是否与定义匹配的最佳方法是什么?
我正试着做一个莫尔斯代码转换器,我决定用字典来存储莫尔斯翻译。不过,我还在绞尽脑汁想出哪种最好的方法来对照输入来检查字典。
我可以做一些类似..。
If unconvertedInput = morseDic commaMorse然而,我认为这将是非常低效的。还是一本字典不适合这里?我只是不确定。
这里还有我不完整的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MorseCodeConverter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, string> morseDictonary = new Dictionary<string, string>();
morseDictonary.Add(" ", " ");
morseDictonary.Add(",", "--..--");
morseDictonary.Add(".", ".-.-.-");
string spaceMorse = morseDictonary[" "];
string commaMorse = morseDictonary[","];
string periodMorse = morseDictonary["."];
MessageBox.Show(spaceMorse);
}
}
}发布于 2015-11-19 07:22:23
我认为这是最简单的方法:
var morseDictonary = new Dictionary<char, string>()
{
{ '.', ".-.-.-" },
{ ',', "--..--" },
{ ' ', " " },
{ 'A', ".-" },
{ 'B', "-..." },
};
var example = "A , B .";
var result = String.Join("", example.Select(x => morseDictonary[x]));我得到了这个结果:
-..--
发布于 2015-11-19 06:59:58
听起来你实际上想要一个静态的字典变量,因为这不会随着时间的推移而改变。然后,我将使用一个StringBuilder来构建结果,而不是试图替换字符串中的文本。(字符串是不可变的,无论如何,这都是一个棘手的命题--当输入和输出严格分开时,生活通常更简单。)
就效率而言,使用StringBuilder将是很好的-字典查找将非常有效。如果您知道只处理ASCII文本,则可以使用string[]并将其按ASCII值进行索引,这将更加有效.但除非你翻译了大量的课文,否则我现在还是坚持查字典。(对于任何合理的文本量,这种情况仍会在眨眼之间发生。)
public class MorseCodeTranslationForm
{
private static readonly Dictionary<char, string> Translations =
new Dictionary<char, string>
{
{ 'A', ".-" },
{ 'B', "-..." },
// etc
};
// Normal constructor etc
// Call this from an event handler...
private static string ConvertToMorse(string text)
{
StringBuilder builder = new StringBuilder();
foreach (char c in text)
{
string translated;
if (Translations.TryGetValue(c, out translation))
{
builder.Append(translated).Translate(' ');
}
else
{
builder.Append(c); // Just leave it as it is
}
}
return builder.ToString();
}
}(您也可能希望将UI代码与morse翻译的“业务逻辑”分开,但这是另一回事。)
发布于 2015-11-19 07:05:15
这可能会有帮助。
请注意,您必须执行期间(.)首先,不能转换破折号(-),否则它们也会被替换。
Dictionary<string, string> morseDictonary = new Dictionary<string, string>();
morseDictonary.Add(".", ".-.-.-"); //*** Important: Do this first ***
morseDictonary.Add(",", "--..--");
morseDictonary.Add(" ", " ");
morseDictonary.Add("A", ".-");
morseDictonary.Add("B", "-...");
//...
string example = "A , B .";
foreach(KeyValuePair<string, string> pair in morseDictonary)
{
example = example.Replace(pair.Key, pair.Value);
}
//example = ".- --..-- -... .-.-.-"https://stackoverflow.com/questions/33797029
复制相似问题