当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

[代码片段]数组统计段内数量

发表于: 2015-01-22   作者:53873039oycg   来源:转载   浏览:
摘要: /** * @Description: 统计以split分割scores数量 * @param scores * @param split:分割段,>0,[60,10,20,10]-->分割为[0-59,60-69,70-89,90-100],统计段内数量 * @return: void */ public void analyseData(doubl
/**
	 * @Description: 统计以split分割scores数量
	 * @param scores
	 * @param split:分割段,>0,[60,10,20,10]-->分割为[0-59,60-69,70-89,90-100],统计段内数量
	 * @return: void
	 */
	public void analyseData(double[] scores,int[] split){
		Arrays.sort(scores);
		Map<String,Integer> numMap=new LinkedHashMap<String,Integer>();
		int[] splitScore=new int[split.length];
		splitScore[0]=split[0];
		int lastValue = 0,index=0;
		index = Arrays.binarySearch(scores, splitScore[0]);
		if (index > 0) {
			//是否有重复值
			for(int i=index-1;i>=0;i--){
				if(scores[i]==splitScore[0]){
					index--;
				}else{
					break;
				}
			}
			if(index>0){
				numMap.put(String.format("<%s",splitScore[0]),index - lastValue);
				lastValue=index;
			}
		}
		for(int i=1,len=split.length;i<len;i++){
			splitScore[i]=splitScore[i-1]+split[i];
			index=Arrays.binarySearch(scores, splitScore[i]);
			if(index<0){
				index=Math.abs(index+1);
			}else{
				//是否有重复值
				for(int j=index-1;j>=0;j--){
					if(scores[j]==splitScore[i]){
						index--;
					}else{
						break;
					}
				}
			}
			//存在大于指定值情况时,最大值累计在最后一段
			if(i==len-1){
				index=Math.max(scores.length, index);
				numMap.put(String.format("[%s-%s]", splitScore[i-1],splitScore[i]),index-lastValue);
			}else{
				numMap.put(String.format("[%s-%s)", splitScore[i-1],splitScore[i]),index-lastValue);
				lastValue=index;
			}
		}
		for (Entry<String, Integer> entry: numMap.entrySet()) {
		  System.out.println(entry.getKey()+"--="+entry.getValue());
		}
	}

     测试:

   

double []array4={-0.1,-0.1,0,0,0,0,0.1,0.1,0.1,0.5,5,5,5,10,11,12,15,15,15,34,34,35,35,54,54,55,55,64,64,65,65,64,65,66,66,100,101,101,110};
		int[] split={0,1,5,10,20,20,10,35};
		t.analyseData(array4, split);

 

    结果:

   

<0--=2
[0-1)--=8
[1-6)--=3
[6-16)--=6
[16-36)--=4
[36-56)--=4
[56-66)--=6
[66-101]--=6

 

[代码片段]数组统计段内数量

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
脚本代码如下: ceph pg dump | awk ' /pg_stat/ { col=1; while($col!=“up”) {col++}; col++ } /
比如想统计一个Java程序员一天写代码的工作量(如:有效代码多少行、空行多少、注释多少行等),这
比如想统计一个Java程序员一天写代码的工作量(如:有效代码多少行、空行多少、注释多少行等),这
陈灯可重用代码段管理器VS插件版5.0发布(代码段收集器、个人代码库、代码片段管理、代码管理) 【
我们有时候会打出很多重复的代码,只是结构一样。 例如属性 /// <summary> /// 编码 /// <
1. 打印输入中单词长度 2. 打印输入中各个字符出现频度的直方图 #include <stdio.h> #include
代码片段:代码片段可以使我们代码敲得更方便,效率更高,但是不推荐新人使用 下面详细说一下代码片
下面的代码很简单,替换参数功能很早前有人写过,而且写的还不错,直接贴代码。 import java.io.FileOu
从Visual Studio 2005开始,IDE支持代码片段。代码片段以代码缩写和TAB自动切换输入点的方式,提高
实现IDisposable的代码片段 1 ~DemoType() 2 { 3 this.Dispose(); 4 } 5 6 #region IDisposable Mem
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号