微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法简化这个功能?

如何解决有没有办法简化这个功能?

我有一个函数,它返回一个带有坐标和对象正在看的方向的字符串。 但我真的不喜欢函数的长度,我想缩短它。我不知道我能做些什么来缩短它。有人可以帮我吗?

函数如下所示:

public string Execute(string text)
{
    var letters = text.tochararray().ToList();

    foreach (var letter in letters)
    {
        if (letter == 'R')
        {
            switch(direction)
            {
                case "N":
                    direction = "E";
                    break;
                case "E":
                    direction = "S";
                    break;
                case "S":
                    direction = "W";
                    break;
                case "W":
                    direction = "N";
                    break;
            }
        }

        if (letter == 'L')
        {
            switch (direction)
            {
                case "N":
                    direction = "W";
                    break;
                case "E":
                    direction = "N";
                    break;
                case "S":
                    direction = "E";
                    break;
                case "W":
                    direction = "S";
                    break;
            }
        }

        if (letter == 'M')
        {
            switch (direction)
            {
                case "N":
                    positionY++;
                    break;
                case "E":
                    positionX++;
                    break;
                case "S":
                    positionY--;
                    break;
                case "W":
                    positionX--;
                    break;
            }
        }
            
        if (letter == 'B')
        {
            switch (direction)
            {
                case "N":
                    positionY--;
                    break;
                case "E":
                    positionX--;
                    break;
                case "S":
                    positionY++;
                    break;
                case "W":
                    positionX++;
                    break;
            }
        }
    }

    return $"{positionX}:{positionY}:{direction}";
}

这里的文本只是一个无用的文本,因此我可以提交我的问题,因为我的代码太长并且 Stackoverflow 将问题识别为主要代码,因此我必须编写更多没有代码括号的文本才能提交问题.您不必阅读此文本,因为它没有任何目的。

解决方法

尝试以下操作:

           string text = "";
            var letters = text.ToCharArray().ToList();
            Dictionary<char,Dictionary<string,string>> dict = new Dictionary<char,string>>() {
                {'R',new Dictionary<string,string>() { { "N","E" },{ "E","S" },{ "S","W" },{ "W","N" }}},{'L',"N" },"S" }}},{'M',"AY" },"AX" },"SY" },"SX" }}},{'R',"SX" },{ "N","AX" }}}
            };
            string direction = "";
            int positionX = 0;
            int positionY = 0;

            foreach (var letter in letters)
            {
                string value = dict[letter][direction];
                switch (value)
                {
                    case "SX":
                        positionX--;
                        break;
                    case "SY":
                        positionY--;
                        break;
                    case "AX":
                        positionX++;
                        break;
                    case "AY":
                        positionY++;
                        break;
                    case "N":
                        direction = value;
                        break;
                    case "E":
                        direction = value;
                        break;
                    case "S":
                        direction = value;
                        break;
                    case "W":
                        direction = value;
                        break;
                }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。