C# 在c中水平追加字符串#

C# 在c中水平追加字符串#,c#,.net,C#,.net,我是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.Appen

我是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);
}
static void Main(字符串[]args)
{
StringBuilder sb=新的StringBuilder();
某人附加(“Id”);
对于(int i=0;i<10;i++)
{
某人附加(i+);
}
(某人);
某人加上(“滚动“#”);
对于(int i=0;i<10;i++)
{
某人附加(i+);
}
(某人);
}

虽然它给了我想要的输出,但这里我必须迭代for循环两次。是否有任何方法可以只迭代一次就得到相同的输出,使用一些C#?

的字符串格式而不是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);
StringBuilder sb1=新的StringBuilder();
StringBuilder sb2=新的StringBuilder();
sb1.附加(“Id”);
sb2.附加(“滚动#”);
对于(int i=0;i<10;i++)
{
sb1.追加(i+“”);
sb2.追加(i+“”);
}
控制台写入线(sb1);
控制台写入线(sb2);
这可以在没有显式循环的情况下完成,使用“生成指定范围内的整数序列”,以及将先前创建的范围与字符串连接起来

// 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
循环来构建序列,您可以构建自己的
范围
方法,例如:

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;
    }
}

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

var arr=newint[10];

对于(int i=1;i这将始终需要至少3个循环:

  • 一个用于创建数组
  • 每行一个
你最多可以让别人的代码为你做循环

除非你对手工将换行符插入一个很长的字符串这样的特技感兴趣,否则就没有办法保存一个循环。但是这样的事情是不可靠的,不应该被取消

老实说,这听起来很像一个速度问题,对于那些我们有答案的人来说。你应该读它,但可以跳过第1部分


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

您可以使用两个stringbuilder,然后以相同的顺序将其内容打印到控制台构建一次数字,并在两个单独的stingsYou中预加id和roll只需要1并将其附加到id和roll中#我们可以创建一个只使用一个StringBuilderWell的逻辑…在这个引擎盖下,它的循环;)只是为了澄清:仍然有一个循环。3实际上。这只是你不必写的循环。是的,它仍然是一个隐藏的循环,让我重新表述一下bit@Cid这涉及到Linq概念,你能给我一个for循环的逻辑,并使用单个StringBuilder吗?基本上,我想附加新字符(或列) horizontally@Cid我们可以用foreach循环替换range,以防我需要列表值吗?请引导
var range = string.Join(" ", Range(1, 10));
sb.AppendLine($"Id {range}");
sb.AppendLine($"Roll# {range}");
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}");