排序StringBuilder行

时间:2014-06-09 13:31:33

标签: c# sorting stringbuilder

我得到了以下格式的StringBuilder结果:

[Cat1] Item1

[Cat2] Item2

[Cat1] Item12

[Cat1] Item89

[Cat3] Item88

使用StringBuilder的AppendLine方法创建了行。 我希望在显示之前对结果进行排序,以便得到结果:

[Cat1] Item1

[Cat1] Item12

[Cat1] Item89

[Cat2] Item2

[Cat3] Item88

最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

如果您不关心性能,可以执行以下操作:

    StringBuilder sb = new StringBuilder();
    sb.AppendLine("3333");
    sb.AppendLine("2222");
    sb.AppendLine("1111");

    List<string> items = new List<string>(sb.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));
    items.Sort();
    sb = new StringBuilder(string.Join("\r\n", items.ToArray()));

答案 1 :(得分:3)

StringBuilder 基本是待处理字符数据的包装器(可变隐藏stringchar[],具体取决于实现)。因此,您无法在内部对其进行排序 - 或者至少不是很容易。你最好的选择是:

  • 将这些行放入List<string>或其他一些集合首先,然后排序并合并
  • 执行string.Split(),对数组进行排序,然后重新组合

第一种可能更有效率。更好的方法是找到对源数据进行排序的方法,以便在开始构建字符串之前对其进行排序。