首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何接受输入,检查字典,以及它是否与定义相匹配?

我应该如何接受输入,检查字典,以及它是否与定义相匹配?
EN

Stack Overflow用户
提问于 2015-11-19 06:48:48
回答 3查看 103关注 0票数 0

如果输入与定义相匹配,那么接受输入、对照字典以及是否与定义匹配的最佳方法是什么?

我正试着做一个莫尔斯代码转换器,我决定用字典来存储莫尔斯翻译。不过,我还在绞尽脑汁想出哪种最好的方法来对照输入来检查字典。

我可以做一些类似..。

代码语言:javascript
复制
If unconvertedInput = morseDic commaMorse

然而,我认为这将是非常低效的。还是一本字典不适合这里?我只是不确定。

这里还有我不完整的代码:

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-19 07:22:23

我认为这是最简单的方法:

代码语言:javascript
复制
var morseDictonary = new Dictionary<char, string>()
{
    { '.', ".-.-.-" },
    { ',', "--..--" },
    { ' ', " " },
    { 'A', ".-" },
    { 'B', "-..." },
};

var example = "A , B .";

var result = String.Join("", example.Select(x => morseDictonary[x]));

我得到了这个结果:

-..--

票数 1
EN

Stack Overflow用户

发布于 2015-11-19 06:59:58

听起来你实际上想要一个静态的字典变量,因为这不会随着时间的推移而改变。然后,我将使用一个StringBuilder来构建结果,而不是试图替换字符串中的文本。(字符串是不可变的,无论如何,这都是一个棘手的命题--当输入和输出严格分开时,生活通常更简单。)

就效率而言,使用StringBuilder将是很好的-字典查找将非常有效。如果您知道只处理ASCII文本,则可以使用string[]并将其按ASCII值进行索引,这将更加有效.但除非你翻译了大量的课文,否则我现在还是坚持查字典。(对于任何合理的文本量,这种情况仍会在眨眼之间发生。)

代码语言:javascript
复制
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翻译的“业务逻辑”分开,但这是另一回事。)

票数 1
EN

Stack Overflow用户

发布于 2015-11-19 07:05:15

这可能会有帮助。

请注意,您必须执行期间(.)首先,不能转换破折号(-),否则它们也会被替换。

代码语言:javascript
复制
        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 = ".- --..-- -... .-.-.-"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33797029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档