如何对一个集合的连续类似项目进行分组?

Can*_*ith 2 wpf datatemplate hierarchicaldatatemplate

考虑以下集合.

  • 真正
  • 真正
  • 真正

我希望以结构化的方式显示它,比如说TreeView.我希望能够围绕整个团体等绘制边框.

  • 真实集团
    • 真正
  • 假组
  • 真实集团
    • 真正
    • 真正
  • 假组

如何使用尽可能少的程序代码完成此操作?

Mar*_*ood 5

这就是您正在寻找的并且是通用的:

private static IEnumerable<IGrouping<int, T>> GroupConsecutive<T>(this IEnumerable<T> set, Func<T, T, bool> predicate)
{
    var i = 0;
    var k = 0;
    var ranges = from e in set
                 let idx = ++i
                 let next = set.ElementAtOrDefault(idx)
                 let key = (predicate(e, next)) ? k : k++
                 group e by key into g
                 select g;
    return ranges;
}
Run Code Online (Sandbox Code Playgroud)

用法:

var set = new List<bool>
            {
                true,
                false,
                false,
                false,
                true,
                true,
                false,
                false,
            };
var groups = set.GroupConsecutive((b1, b2) => (b1 == b2));
foreach (var g in groups)
{
    Console.WriteLine(g.Key);
    foreach (var b in g)
        Console.WriteLine("\t{0}", b);
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
        True
1
        False
        False
        False
2
        True
        True
3
        False
        False
Run Code Online (Sandbox Code Playgroud)