有一个二维数组,欲对其进行统计

Dluxd 2006-04-25 12:46:20
现有一个二维数组如下,欲对其进行统计。
====================================
string[,] strArr = new string[32,2];
strArr[0,0]="1999-01-01 04:00:00"; strArr[0,1]="9.2";
strArr[1,0]="1999-01-01 04:30:00"; strArr[1,1]="12.1";
strArr[2,0]="1999-01-01 05:00:00"; strArr[2,1]="11.1";
strArr[3,0]="1999-01-01 05:30:00"; strArr[3,1]="12.5";
strArr[4,0]="1999-01-01 06:00:00"; strArr[4,1]="12.0";
strArr[5,0]="1999-01-01 06:30:00"; strArr[5,1]="15.4";
strArr[6,0]="1999-01-01 07:00:00"; strArr[6,1]="15.2";
strArr[7,0]="1999-01-01 07:30:00"; strArr[7,1]="14.0";
strArr[8,0]="1999-01-01 08:00:00"; strArr[8,1]="13.0";
strArr[9,0]="1999-01-01 08:30:00"; strArr[9,1]="16.1";
strArr[10,0]="1999-01-01 09:00:00"; strArr[10,1]="16.4";
strArr[11,0]="1999-01-01 09:30:00"; strArr[11,1]="18.1";
strArr[12,0]="1999-01-01 10:00:00"; strArr[12,1]="17.1";
strArr[13,0]="1999-01-01 10:30:00"; strArr[13,1]="14.0";
strArr[14,0]="1999-01-01 11:00:00"; strArr[14,1]="14.1";
strArr[15,0]="1999-01-01 11:30:00"; strArr[15,1]="15.0";
strArr[16,0]="1999-01-01 12:00:00"; strArr[16,1]="15.2";
strArr[17,0]="1999-01-01 12:30:00"; strArr[17,1]="15.9";
strArr[18,0]="1999-01-01 13:00:00"; strArr[18,1]="19.1";
strArr[19,0]="1999-01-01 13:30:00"; strArr[19,1]="20.4";
strArr[20,0]="1999-01-01 14:00:00"; strArr[20,1]="15.3";
strArr[21,0]="1999-01-01 14:30:00"; strArr[21,1]="15.1";
strArr[22,0]="1999-01-01 15:00:00"; strArr[22,1]="14.4";
strArr[23,0]="1999-01-01 15:30:00"; strArr[23,1]="13.4";
strArr[24,0]="1999-01-01 16:00:00"; strArr[24,1]="14.4";
strArr[25,0]="1999-01-01 16:30:00"; strArr[25,1]="16.7";
strArr[26,0]="1999-01-01 17:00:00"; strArr[26,1]="16.1";
strArr[27,0]="1999-01-01 18:00:00"; strArr[27,1]="16.0";
strArr[28,0]="1999-01-01 18:30:00"; strArr[28,1]="15.0";
strArr[29,0]="1999-01-01 19:00:00"; strArr[29,1]="15.1";
strArr[30,0]="1999-01-01 20:00:00"; strArr[30,1]="14.1";
strArr[31,0]="1999-01-01 20:30:00"; strArr[31,1]="8.2";
====================================
有参数x、y、m、n、k(皆为变量)
x、y 为参照值(y>x)
m为组数,n为小于x组数(大于y的组数与其相同,m>2n,n>0),
则k为在x、y间的组数(k=m-2*n),
组距r=(x-y)/k
则可以得到分组的范围

(x-n*r) <= 第1组 < (x-(n-1)*r)
(x-(n-1)*r) <= 第2组 < (x-(n-2)*r)
|
|
(x-(n-((n-1)-1))*r) <= 第n-1组 < (x-(n-(n-1))*r)
(x-r) <= 第n组 < x
x <= 第n+1组 < x+r
|
|
x+(k-1)*r <= 第n+k组 < x+k*r //**其中 x+k*r=y
x+k*r <= 第n+k+1组 < y+r //**其中 x+k*r=y
|
|
y+((m-1)-1)*r <= 第m-1组 < y+(m-1)*r
y+(m-1)*r <= 第m组 < y+m*r

说明
1、对于小于第1组下限的数据都统计到第1组中(也就是所有小于第1组上限的全部统计到第1组中)。
2、对于大于第m组上限的数据都统计到第m组中(也就是所有大于第m组下限的全部统计到第m组中)。

现想统计按以上分组所得的各组的频次,
设x=12.5 y=17.5 m=9 n=2 则可以得到
========================================
组名 范围 频次
----------------------------------------
第1组 11.5以下 3
第2组 11.5-12.5 1
第3组 12.5-13.5 3
第4组 13.5-14.5 6
第5组 14.5-15.5 8
第6组 15.5-16.5 5
第7组 16.5-17.5 2
第8组 17.5-18.5 1
第9组 18.5以上 2
-----------------------------------------











...全文
316 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chongzi1 2006-04-28
  • 打赏
  • 举报
回复
不要吵了,写出来就好,顺便接点分
Dluxd 2006-04-28
  • 打赏
  • 举报
回复
唧唧歪歪的那几个有那个写出来了,这么多天过去了,我是写出来了,你们呢
-渔民- 2006-04-27
  • 打赏
  • 举报
回复
有新手入來的時候啊,不見怪
Dluxd 2006-04-27
  • 打赏
  • 举报
回复
恩,鄙视
Dluxd 2006-04-26
  • 打赏
  • 举报
回复
UP
心情解码 2006-04-26
  • 打赏
  • 举报
回复
:)



-
Dluxd 2006-04-26
  • 打赏
  • 举报
回复
楼上貌似在好多贴里面都回了同样的一句话
NetFlag 2006-04-26
  • 打赏
  • 举报
回复
有的人啊偏要唧唧歪歪的活着.

鄙视
RUN_ 2006-04-26
  • 打赏
  • 举报
回复
up
Dluxd 2006-04-25
  • 打赏
  • 举报
回复
set @h = (@max-@min)/@k
declare @t table(groupid int identity(1,1),min_value decimal(5,2),max_value decimal(5,2))
set rowcount @k insert into @t
select 0 as min_value,0 as max_value from @b1 set rowcount 0
update @t set
min_value=(case when groupid=1 and (@s+(groupid-1-@k/2.0)*@h)>@min then @min-1 else (@s+(groupid-1-@k/2.0)*@h) end),
max_value=(case when groupid=@k and (@s+(groupid-@k/2.0)*@h) <=@max then @max+1 else (@s+(groupid-@k/2.0)*@h) end)
select
组名 = rtrim(b.groupid)+'组',
范围 = rtrim(b.min_value)+'-'+rtrim(b.max_value),
频率 = sum(case a.g101 when @tt then 1 else 0 end), b.min_value, b.max_value from @t b
left join @b1 a on a.g103 >= b.min_value and a.g103 < b.max_value and
a.g102 between @b and @e and a.g101=@tt group by b.groupid,b.min_value,b.max_value
以上是以前用SQL写的功能略有不同.但SQL效率太低.有的人啊偏要唧唧歪歪的活着.
zhaoliang_chen 2006-04-25
  • 打赏
  • 举报
回复
简单一点实现它
boyxia 2006-04-25
  • 打赏
  • 举报
回复
先将分组信息计算出来,放到数组或DataTable中,再将待统计的数据数组转换到DataTable中,用table的Compute方法应该好做一些,dataTable1.Compute("count(列1)","列1 > 11.5")
Yellow198267 2006-04-25
  • 打赏
  • 举报
回复
告诉你吧。自己把数组的范围 化简 一下就看出规律来了。没空给你写了。上班呢。好运!!
majianbing 2006-04-25
  • 打赏
  • 举报
回复
晕,这样的问题也搬出来了
Yellow198267 2006-04-25
  • 打赏
  • 举报
回复
你这只是个算法问题,不牵涉什么技术难题吧?基本的算法都不会写吗?那你是不是搞开发的?
Knight94 2006-04-25
  • 打赏
  • 举报
回复
自己动手做循环吧,没有什么简便的方法
Yellow198267 2006-04-25
  • 打赏
  • 举报
回复
这么简单的问题也拿来问?有了csdn ,自己就不用动脑子了吗?

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧