繁体   English   中英

在 C# 中水平附加字符串

[英]appending string horizontally in c#

我是 C# 的新手,在这个程序中尝试了一个演示程序,我的预期输出是:

Id     1 2 3 4 5 6 7 8 9
Roll # 1 2 3 4 5 6 7 8 9

这就是我尝试过的:

static void Main(string[] args)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("Id ");
    for (int i = 0; i < 10; i++)
    {
        sb.Append(i+" ");
    }
    sb.AppendLine();
    sb.Append("Roll# ");
    for (int i = 0; i < 10; i++)
    {
        sb.Append(i + " ");
    }
    Console.WriteLine(sb);
}

虽然它给了我想要的输出,但在这里我必须遍历 for 循环两次。 有什么方法可以使用 C# 的一些字符串格式只迭代一次我可以获得相同的输出?

这可以在没有显式循环的情况下完成,使用Enumerable.Range“生成指定范围内的整数序列” ,以及string.Join()将先前创建的范围与字符串" "

// using System.Linq;

string range = string.Join(" ", Enumerable.Range(1, 10)); // "1 2 3 4 5 6 7 8 9 10"
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");

如果您真的想使用for循环来构建序列,则可以构建自己的Range方法,例如:

public static IEnumerable<int> Range(int min, int max)
{
    if (min > max)
    {
        throw new ArgumentException("The min value can't be greater than the max");
    }
    for (int i = min; i <= max; i++)
    {
        yield return i;
    }
}

然后像以前一样Join

var range = string.Join(" ", Range(1, 10));
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");

或者构建一个数组/列表/任何集合,然后使用string.Join()

var arr = new int [10];
for (int i = 1; i <= 10; i++)
{
    arr[i - 1] = i;
}

string range = string.Join(" ", arr);
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");

或者直接在循环中构建一个字符串:

var sbRange = new StringBuilder();
for (int i = 1; i <= 10; i++)
{
    sbRange.Append($"{i} ");
}
// You can use a string and trim it (there is a space in excess at the end)
string range = sbRange.ToString().Trim();

sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");

而不是 1,使用 2 StringBuilder实例:

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
sb1.Append("Id ");
sb2.Append("Roll# ");
for (int i = 0; i < 10; i++)
{
    sb1.Append(i + " ");
    sb2.Append(i + " ");
}
Console.WriteLine(sb1);
Console.WriteLine(sb2);

这将始终需要至少 3 个循环:

  • 一个用于创建数组。
  • 每个 WriteLine 一个。

充其量你可以让别人的代码你做循环。

除非您对像手动将换行符手动插入非常长的字符串这样的特技感兴趣,否则甚至无法保存单个循环。 但这样的事情只是不可靠,不应该尝试。

老实说,这听起来很像一个速度问题,对于那些我们有速度咆哮的人 无论哪种方式,您都应该阅读它,但可以跳过第 1 部分。

我能想到的唯一改进是使用 stringbuilder 构建这些字符串。 循环中的字符串连接可能有点麻烦。 但在这个规模上,它可以以任何方式工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM