Group by variable integer range using Linq
我正在尝试根据整数的范围对一组数据进行分组,但范围不会以固定的间隔增加。
例如 我有
商品ID价格
1 10
2 30
3 50
4120
我想将价格为0-10、11-100和100-500的商品分组。 因此,项目1在组A中,项目2,3在组B中,在组C中在项目4。
我能想到的最接近的是
从项目
按(items.price / 10)分组项目
然后将各组放在一起以获得不同的范围。
有任何想法吗?
参数化范围上限列表...
1 2 | var ceilings = new[] { 10, 100, 500 }; var groupings = items.GroupBy(item => ceilings.First(ceiling => ceiling >= item)); |
这样的事情怎么样?
1 2 3 4 5 6 7 8 9 10 11 12 13 | var data = new[] { new { Id = 1, Price = 2 }, new { Id = 1, Price = 10 }, new { Id = 2, Price = 30 }, new { Id = 3, Price = 50 }, new { Id = 4, Price = 120 }, new { Id = 5, Price = 200 }, new { Id = 6, Price = 1024 }, }; var ranges = new[] { 10, 50, 100, 500 }; var grouped = data.GroupBy( x => ranges.FirstOrDefault( r => r > x.Price ) ); |
可能类似(未测试):
1 2 | item.Price <= 10 ?"A" : (item.Price <= 100 ?"B" : (item.Price <= 500 ?"C" :"X")) |
(并以此分组)
如果这是LINQ-to-Objects,则还可以在静态实用程序功能(
您可以使用Linq选择不同集合中的整数。
就像是:
1 | var newList = theList.Where(i => i < 30 && i >10); |
这将使您从一定的时间间隔中获得全部收益。