如何对集合中连续的相似项目进行分组? [英] How to group consecutive similar items of a collection?
本文介绍了如何对集合中连续的相似项目进行分组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
请考虑以下集合.
- 真
- 错误
- 错误
- 错误
- 真
- 真
- 错误
- 错误
我想以结构化的方式显示它,例如,以TreeView
形式显示.我希望能够在整个组等周围绘制边框.
I want to display it in a structured way, say, in a TreeView
. I want to be able to draw borders around entire groups and such.
- 真实小组
- 真
- True Group
- True
- 错误
- 错误
- 错误
- 真
- 真
- 错误
- 错误
如何用尽可能少的过程代码来完成此操作?
How do I accomplish this with as little procedural code as possible?
推荐答案
这可以满足您的需求,并且通用:
This does what you're looking for and is generic:
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; }
用法:
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); }
输出:
0 True 1 False False False 2 True True 3 False False
这篇关于如何对集合中连续的相似项目进行分组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文