linq 按多个换行符分组的更简单方法

qq24tv8q  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(152)

今天我遇到了一个看起来很简单但实际上并不简单的问题。我的任务是将多个字符串分组并用两个换行符分隔。例如:

a
b

c
d

e
f
g

h

转换为:

[ [a, b], [c, d], [e, f, g], [h] ]

一开始我想从正则表达式中得到组,但是我找不到合适的正则表达式来分离并给予我分组的字符串。然后我决定用LINQ来看看,但是我也找不到任何有用的东西。有什么提示吗?

p8ekf7hl

p8ekf7hl1#

可以将String.Split与两个串联的Environment.NewLine一起使用:

string[][] result = text.Split(new [] { Environment.NewLine + Environment.NewLine }, StringSplitOptions.None)
    .Select(token => token.Split(new []{Environment.NewLine}, StringSplitOptions.None))
    .ToArray();

https://dotnetfiddle.net/NinneE

sd2nnvve

sd2nnvve2#

按新行拆分输入是AOC的经典之作。下面是我的扩展Method.net7的一部分:

public static class Extention{
  /// <summary>
  /// Splits a text into lines.
  /// </summary>
  public static IEnumerable<string> Lines(this string text) => text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);

  /// <summary>
  /// Splits a text into blocks of lines. Split occurs on each empty line.
  /// </summary>
  public static IEnumerable<string> Blocks(this string text) => text.Trim().Split(Environment.NewLine + Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
}

代码为:

var result = text.Blocks()
                 .Select(b => b.Lines());

注:
.Split(Environment.NewLine + Environment.NewLine,为.NET 7

相关问题