【发布时间】:2016-02-25 11:05:03
【问题描述】:
我在这个 stackoverflow 中找到了分层分组的好解决方案。
How can I hierarchically group data using LINQ?
它对我帮助很大,但我想问我如何才能达到相同的结果,但没有递归。老实说,我在转换它时遇到了问题,因为递归对我来说是自然的方法。任何人都可以将此方法转换为不使用递归?
用法:
var result = customers.GroupByMany(c => c.Country, c => c.City);
已编辑:
public class GroupResult
{
public object Key { get; set; }
public int Count { get; set; }
public IEnumerable<GroupResult> SubGroups { get; set; }
public override string ToString()
{ return string.Format("{0} ({1})", Key, Count); }
}
public static class MyEnumerableExtensions
{
public static IEnumerable<GroupResult> GroupByMany<TElement>(
this IEnumerable<TElement> elements,
params Func<TElement, object>[] groupSelectors)
{
if (groupSelectors.Length > 0)
{
var selector = groupSelectors.First();
//reduce the list recursively until zero
var nextSelectors = groupSelectors.Skip(1).ToArray();
return
elements.GroupBy(selector).Select(
g => new GroupResult
{
Key = g.Key,
Count = g.Count(),
SubGroups = g.GroupByMany(nextSelectors)
});
}
return null;
}
}
提前致谢
【问题讨论】:
-
提示。使用循环而不是带有递归的 if 语句
while(groupselectors.Length > 0) do things inside loop -
有什么理由需要移除递归?
-
顺便说一句,您发布的代码无法编译。
-
@Ivan Stoev 现在应该可以编译了
-
谢谢,但如果你能提供某种动机(理由)来满足转换的需要,那就太好了。
标签: c# linq recursion refactoring hierarchy