Как изменить содержимое строки в соответствии с другой строкой с помощью LINQ C # - PullRequest
0 голосов
/ 04 ноября 2018

В моей домашней работе у меня есть задание скопировать загадочную машину. поэтому я строю часть отражателя. Отражатель имеет такую ​​конфигурацию:

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. кто-нибудь может помочь?

1 Ответ

0 голосов
/ 04 ноября 2018

Я бы не использовал слова лучше обязательно, но, возможно, использует меньше строк кода, вот реализация с использованием 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
...