【问题标题】:repeat string with LINQ/extensions methods [duplicate]使用 LINQ/扩展方法重复字符串 [重复]
【发布时间】:2012-12-01 14:48:42
【问题描述】:

只是我正在调查的一个好奇心。

问题:简单地重复(相乘,有人会说)一个字符串/字符 n 次。
我知道有 Enumerable.Repeat 来实现这个目标,但我试图在没有它的情况下做到这一点。 LINQ 在这种情况下似乎毫无用处,因为在像

这样的 查询
from X in "s" select X  

字符串“s”正在被探索,所以X是一个char扩展方法也是如此,因为例如 "s".Aggregate(blablabla) 将再次只作用于字符 's',而不是字符串本身。为了重复字符串,需要一些“外部”的东西,所以我认为 lambdasdelegates,但如果不声明一个变量来分配委托/lambda,就无法完成表达到。
所以像定义一个函数并内联调用它:

( (a)=>{return " "+a;} )("a");  

delegate(string a){return " "+a}(" ");  

会给出“无名”错误(因此 没有递归,AFAIK,即使通过可能的 lambda/delegate 作为 参数 传递),最后由于其局限性,甚至无法由 C# 创建。
可能是我从错误的角度看待这件事。有什么想法吗?
这只是一个实验,我不关心表演,不关心内存使用......只是它是一条线并且有点自主。也许有人可以使用 Copy/CopyTo 做某事,或者将其投射到其他集合中,我不知道。 反思也被接受。

【问题讨论】:

  • 几乎;我想避免 enumerable.repeat
  • 你读过那个帖子的答案了吗?它使用字符串构造函数,而不是Enumerable.Repeat
  • 它重复一个字符,好吧,但是一个字符串
  • 我在下面添加了一个会重复字符串的答案。

标签: c#-4.0


【解决方案1】:

要重复一个字符 n 次,您不会使用 Enumerable.Repeat,而只需使用 this string constructor

string str = new string('X', 10);

要重复一个字符串,我没有什么比使用string.JoinEnumerable.Repeat 更好的方法了

string foo = "Foo";
string str = string.Join("", Enumerable.Repeat(foo, 10));

编辑:如果你不需要分隔符,你可以使用string.Concat

string str = string.Concat( Enumerable.Repeat(foo, 10) );

【讨论】:

  • 我没看到,有用;你知道一些重复字符串的方法吗?
  • @lunadir:编辑了我的答案。
  • 看到了;迟到总比没有好
【解决方案2】:

如果你想重复一个字符串而不是一个字符,一个简单的方法是使用StringBuilder.Insert method,它需要一个插入索引和一个要使用的重复次数的计数:

var sb = new StringBuilder();
sb.Insert(0, "hi!", 5);
Console.WriteLine(sb.ToString());

否则,要重复单个字符,请使用我在 similar question here 的 cmets 中提到的字符串构造函数。例如:

string result = new String('-', 5); // -----

为了完整起见,值得注意的是StringBuilder 提供了一个可以重复字符的overloaded Append method,但对于字符串没有这种重载(这就是Insert 方法的用武之地)。如果这就是我感兴趣的全部,我更喜欢字符串构造函数而不是StringBuilder。但是,如果我已经在使用StringBuilder,那么使用Append 方法从一些链接中受益可能是有意义的。这是一个人为的示例来演示:

var sb = new StringBuilder("This item is ");
sb.Insert(sb.Length, "very ", 2) // insert at the end to append
  .Append('*', 3)
  .Append("special")
  .Append('*', 3);
Console.WriteLine(sb.ToString()); // This item is very very ***special***

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 2013-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多