有没有一种优雅的linqy方式来做到这一点?
我想要做的是创建给定长度的字符串,由另一个字符串的倍数组成,直到该长度
所以对于长度 - 9和输入字符串“xxx”我得到“xxxxxxxxx”(即长度为9)
对于非整数倍,那么我想截断该行。
我可以使用循环和StringBuilder轻松完成此操作,但我希望看看该语言是否可以轻松表达这个想法。
(仅供参考我为我的儿子做复活节数学作业)
答案 0 :(得分:3)
不,没有简单和优雅 - 你必须自己编码。
您可以构造一个包含多个重复字符的字符串,但不重复字符串, 即。
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));
}
答案 1 :(得分:2)
使用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);
答案 2 :(得分:1)
我的Linqy(;))解决方案是创建一个扩展方法。 Linq是语言集成查询,为什么滥用?我很确定使用linq的select语句是可能的,因为你可以创建新的(匿名)对象,但为什么......?