使用C#/ Linq生成字符串的修复序列

时间:2012-11-12 19:14:36

标签: c# linq

我希望在不做的情况下轻松生成500个字符:

String range = "0123456789101112131415..."; 

我想要一个500字符的精确字符串。

我该怎么做?

Enumerable.Range(0,500).Select( c => c.ToString());

无效,因为

数字123是3个字符而不是1,其中存在问题。

6 个答案:

答案 0 :(得分:11)

如果您不关心哪些字符,那么您可以使用String构造函数:

String s = new String('0', 500);

这将为您提供一个500“0”的字符串。或500 X的:

String s = new String('X', 500);

答案 1 :(得分:2)

您想使用Aggregate

  string range = Enumerable.Range(0,500)
                .Select(x => x.ToString()).Aggregate((a, b) => a + b);
  Console.WriteLine(range);

这将为您提供从0到500的串联数字字符串。像这样:01234567891011121314151617...
如果你需要从这个大字符串中取出500个字符,你可以进一步使用子字符串。

string range = Enumerable.Range(0,500)
              .Select(x => x.ToString()).Aggregate((a, b) => a + b);
Console.WriteLine(range.Substring(0, 500));

答案 2 :(得分:1)

这应该可以解决问题。

var range = new string(String.Concat(Enumerable.Range(0, 500)
                                               .Select(c => c.ToString()))
                             .Take(500).ToArray()
                      );

答案 3 :(得分:1)

LINQ很漂亮,但你总是需要它......:

static string NumString(int length) {
    var s = "";
    var i = 0;
    while (s.Length < length) {
        s += i.ToString();
        i++;
    }
    return s.Substring(0, length);
}

或使用Aggregate的变体:

var str = Enumerable.Range(0, 500)
          .Aggregate("", (s, next) => s += next.ToString(), 
                         s => s.Substring(0, 500));

答案 4 :(得分:0)

new string(Enumerable.Range(0,500).SelectMany(x => x.ToString()).Take(500).ToArray())

LINQ最简单的方法。由于字符串在技术上是可枚举的(char []),因此您可以使用SelectMany(它将多个Enumerables并展平为单个集合),然后使用Take(500)仅获取500个字符,调用ToArray以获取char []实例化一个新字符串。

答案 5 :(得分:0)

还有一个选项,不是原始问题的请求输出 - 数字是随机的而不是增加的 - 但相当简洁(我知道,OP不需要一串随机数字但是这是任何一种情况。)

var rand = new Random();
string.Join("",Enumerable.Repeat(0, 500).Select(i => rand.Next(10)));