使用0到9之间的数字填充字符串并从新开始直到长度为50

时间:2016-04-22 13:13:31

标签: c# arrays string

所以今天我见过this question。现在我想了一下,想出了以下场景:

string myString = "Hello";
int[] numbersFromZeroToNine = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

我想将numbersFromZeroToNine中的数字添加到myString(在位置0重新开始),直到myString的长度为50.如果myString已经超过50个字符,我想打印出前50个字符。

我可以使用以下几行来实现它:

if (myString.Length >= 50)
    myString = myString.Substring(0, 50);
else
{
    for (int counter = 0; myString.Length < 50; counter++)
    {
        if (counter == numbersFromZeroToNine.Count())
            counter = 0;
        myString += numbersFromZeroToNine[counter];
    }
}

Console.WriteLine(myString);
Console.ReadLine();

结果:

  

Hello012345678901234567890123456789012345678901234

如您所见,我可以在for内使用if循环和else语句来完成此操作。但我不认为这是这种情况下最好(也是最短)的方法。这就是我现在想问你的问题:是否有更短的解决方案来实现相同的结果?

6 个答案:

答案 0 :(得分:4)

Terser,但我害怕,不太可读 Linq 解决方案:

  string prefix = "Hello";
  int length = 50;

  // Hello012345678901234567890123456789012345678901234
  string result = prefix + 
    new string(Enumerable
                .Range(0, length - prefix.Length)
                .Select(c => (Char) ('0' + c % 10))
                .ToArray());

答案 1 :(得分:3)

你可以使用这种使用am indefinit数字序列的LINQ方法。 LINQ延迟执行的一个很好的演示:

die()

但是首先存储IEnumerable<char> numbers = Enumerable.Repeat(numbersFromZeroToNine, int.MaxValue) .SelectMany(intArr => intArr) .Select(i => i.ToString()[0]); if (myString.Length < 50) { var chars = myString.ToCharArray().Concat(numbers).Take(50); myString = String.Concat(chars); } 会更容易:

char[]

答案 2 :(得分:2)

你可以使用LINQ和string.Concat以及modulo(%)来实现:

myString += string.Concat(Enumerable.Range(0, 50 - myString.Length).Select(i => i % 10));

但如果这是更好是基于意见。如果更快要测量。

答案 3 :(得分:2)

见下面的代码:

var str = "Hello";
str += new string(Enumerable.Range(0, 50 - str.Length)
      .Select(i => (char)('0' + (i % 10))).ToArray());

答案 4 :(得分:0)

您可以使用RangeRepeat来简化并避免编写foreach循环以支持LINQ:

var prefix = "Hello";
var numbers = Enumerable.Repeat(
        Enumerable.Range(0, 10), 
        (50 - prefix.Length) / Enumerable.Range(0, 10).Count() + 1)
    .SelectMany (e => e.Select (x => x)).ToArray();

var myString = (prefix + 
    string.Join("", numbers.Select (n => n.ToString()))).Substring(0, 50);

答案 5 :(得分:0)

只是同一主题的另一个变体,但使用StringBuilder和老式for循环。

struct()