簡體   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