首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过显示范围和数量将列表中的数据按范围分组

如何通过显示范围和数量将列表中的数据按范围分组
EN

Stack Overflow用户
提问于 2019-11-26 09:51:23
回答 1查看 44关注 0票数 0

我正在尝试开发一种逻辑,可以将年龄列表分组到由元组定义的范围中,其中预期的结果如下所示:

代码语言:javascript
复制
RANGE, QUANTITY
0-4, 3
5-9, 3
10-14, 1
15-19,2

为此,我创建了以下代码:

代码语言:javascript
复制
var peoples = new[] {
    new { Id = 1, Age = 2 },
    new { Id = 2, Age = 3 },
    new { Id = 3, Age = 4 },
    new { Id = 4, Age = 6 },
    new { Id = 5, Age = 7 },
    new { Id = 6, Age = 10 },
    new { Id = 7, Age = 16 },
    new { Id = 8, Age = 7 },
    new { Id = 9, Age = 19 },
    new { Id = 10, Age = 23 },
};

var rangesAccepted = new[] { 5, 10, 15, 20, 30 };

var tuples = new List<(int, int)>
{
    (0, 4),
    (5, 9),
    (10, 14),
    (15, 19)
};

var grouped = peoples.
    GroupBy(x => rangesAccepted.FirstOrDefault(r => r >= x.Age))
    .Select(g => new 
    {
        Index = g.Key,
        Quantity = g.Count()
    })
    .OrderBy(g => g.Index)
    .ToList();

var grouped2 = new List<dynamic>();

foreach (var g in grouped)
{
    foreach (var t in tuples)
    {
        if (g.Index >= t.Item1 && t.Item2 <= g.Index)
        {
            grouped2.Add(new
            {
                Range = $"{t.Item1}-{t.Item2}",
                g.Quantity
            });
        }
    }
}

首先,我使用的是一个列表,但我使用实体框架而不是使用静态列表从数据库中获得这些结果的真正原因。我阅读了其他答案,但没有一个答案说明如何显示上一个示例中所示的范围。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 10:05:51

假设rangesAccepted中没有重复项,您可以使用Array.IndexOf来查找Grouping Key的索引。

代码语言:javascript
复制
var result = peoples.GroupBy( x => rangesAccepted.FirstOrDefault( r => r > x.Age ) )
        .Select(x=> 
        new
        { 
            Range = Array.IndexOf(rangesAccepted,x.Key)==0?$"0-{x.Key-1}":$"{rangesAccepted[Array.IndexOf(rangesAccepted,x.Key)-1]}-{rangesAccepted[Array.IndexOf(rangesAccepted,x.Key)]-1}",
            Size = x.ToList().Count
        });

输出

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59042577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档