首页 新闻 搜索 专区 学院

求一个算法,数据分组统计个数

0
悬赏园豆:5 [已解决问题] 解决于 2012-02-03 09:01

一个 数组内有 N个浮点数
现在又一个 区间集合 类似 1-10 10-20 20-30 。。。。这样的(可变的)

求一个算法(应该很基础0,0 但是想不太明白如何更效率) 统计 这个 数组在 这个区间组内出现的次数

其实数据量不大,是否用linq 实现更 快捷

喵哈哈的主页 喵哈哈 | 初学一级 | 园豆:146
提问于:2011-12-16 09:17
< >
分享
最佳答案
0
        class Range
{
public int Min { get; private set; }
public int Max { get; private set; }

public Range(int min_inclusive, int max_exclusive)
{
Min = min_inclusive;
Max = max_exclusive;
}

public bool Contains(decimal num)
{
return Min <= num && num < Max;
}

public override string ToString()
{
return string.Format("{0} ~ {1}", Min, Max);
}
}

static void Main(string[] args)
{
var ranges = new List<Range>()
{
new Range(0,10),
new Range(10,30),
new Range(30,35)
};

var numbers = new[] { 1.1m, 2, 36, -1m, 100.9m, 44, 19.0m };

//当range数目远大于numbers数目时用这个更高效
var accounting1 = ranges.ToDictionary(r => r, r => numbers.Count(n => r.Contains(n)));

//当numbers数目远大于range时用这个更高效
var accounting2 = numbers.Aggregate(ranges.ToDictionary(r => r, r => 0), (dict, n) =>
{
var range = dict.Keys.SingleOrDefault(r => r.Contains(n));
if (range != null) dict[range]++;
return dict;
});
}
收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2011-12-16 11:22

\(≧▽≦)/  敢不敢不这么强大

喵哈哈 | 园豆:146 (初学一级) | 2011-12-16 11:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册