首页 > 解决方案 > 如何使用LINQ C#根据另一个字符串更改字符串内容

问题描述

在我的家庭作业中,我的任务是复制谜题机器。所以我正在构建反射器部分。反射器的配置如下:

YRUHQSLDPXNGOKMIEBFZCWVJAT

并且任务是针对字符串中的每个字符,我需要将其替换为配置位置中的相应字符,假设文本仅包含大写字母。例如,假设我有这样的输入:

ABCXYZ

所以答案是“YRUJAT”

所以我做了一个这样的函数:

public string GetReflectedString(string msg)
{
    StringBuilder answer = new StringBuilder();
    foreach (char item in msg)
    {
        answer.Append(m_configuration[Helper.ABC.IndexOf(item.ToString().ToUpper())]);
    }
    return answer.ToString();
}

但我觉得这可以通过 LINQ 函数做得更好。有人可以帮忙吗?

标签: c#stringlinqstringbuilder

解决方案


我不一定会更好地使用这些词,但可能会使用更少的代码行,这是使用 linq 的实现:

var result = new string(msg.Select(c => m_configuration[Helper.ABC.IndexOf(c)]).ToArray());

糟糕的是,将 替换foreach为投影 ( .Select),然后将其全部作为string构造函数的输入。

作为一个简短的独立示例:

var configuration = "YRUHQSLDPXNGOKMIEBFZCWVJAT";
var abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

var input = "ABCXYZ";
var result = new string(input.Select(c => configuration[abc.IndexOf(c)]).ToArray());
Console.WriteLine(result);    // YRUJAT

推荐阅读