что такое C # эквивалент строки $ из базового - PullRequest
2 голосов
/ 16 апреля 2010

И есть ли элегантный linqy способ сделать это?

То, что я хочу сделать, это создать строку заданной длины с кратными до другой строки до этой длины

Таким образом, для длины - 9 и входной строки "xxx" я получаю "xxxxxxxxx" (т.е. длина 9)

для нецелого кратного, тогда я хотел бы обрезать строку.

Я могу легко сделать это, используя циклы и StringBuilder, но я хочу посмотреть, сможет ли язык легко выразить эту идею.

(К вашему сведению, я делаю домашнюю работу по Пасхальной математике для моего сына)

Ответы [ 3 ]

3 голосов
/ 16 апреля 2010

Нет, ничего простого и изящного - вы должны написать это сами.

Вы можете создать строку с количеством повторяющихся символов, но не с повторяющимися строками, т.е.

string s = new string("#", 6);    // s = "######"

Чтобы сделать это со строками, вам понадобится цикл для их конкатенации, и тогда проще всего будет использовать подстроку для усечения до желаемой конечной длины - вдоль строк:

string FillString(string text, int count)
{
    StringBuilder s = new StringBuilder();
    for(int i = 0; i <= count / text.Length; i++)
        s.Add(text);

    return(s.ToString().Substring(count));
}
2 голосов
/ 16 апреля 2010

Возможное решение с использованием Enumerable.Repeat.

const int TargetLength = 10;

string pattern = "xxx";

int repeatCount = TargetLength / pattern.Length + 1;

string result = String.Concat(Enumerable.Repeat(pattern, repeatCount).ToArray());

result = result.Substring(0, TargetLength);

Console.WriteLine(result);
Console.WriteLine(result.Length);
1 голос
/ 16 апреля 2010

Моим решением Linqy (;)) было бы создание метода расширения. Linq интегрирован в язык запрос , так почему злоупотребление? Я уверен, что это возможно с помощью оператора select linq, поскольку вы можете создавать новые (анонимные) объекты, но почему ...?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...