首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组中存储数字

在数组中存储数字
EN

Stack Overflow用户
提问于 2014-09-15 09:18:42
回答 1查看 2.9K关注 0票数 0

我有一个数字列表,例如1到60,但不一定是1的增量,例如1-40的增量,和40-60的增量2。

我有另一组定义的数字(桶)-e.g 2,3,5,10,30,50

我需要产生一个二维数组的百分比,每个数字从上面(1到60)适合哪个桶。

为了使这更简单:假设我们有数字1到10,和桶,2,3,5,10

我希望我的二维数组看起来像这样:

我可以用一堆条件来做这件事,但我认为有一个解决办法,我还没有想到,如果有人能给我一些启发,那就太好了!我需要在JavaScript中这样做,但是任何语言都会帮助我尝试和理解任何解决方案,而不是很多if决定每个数字适合的位置,然后对每个单元格执行(6-5/10-5)=0.2。

我试图避免硬编码桶,2,3,5,10,以便任何一组桶或数字可以完成这项工作。

编辑:首先,我很抱歉描述不完整--当时我在手机上,无法通过电脑在堆栈溢出上发帖子。

1-10和2,3,5,10都代表年份。实际上,我每年都在努力从1岁到10岁。

  • 第一年是100%进入桶2-我想这个细胞没有一个特定的公式
  • 第二年100%进入桶2-也没有具体公式
  • 第三年100%进入桶3- 3==3
  • 第四年分为第三个桶和第五个桶。其公式是:(4年-桶3 )/(桶5 -桶3) = 0.5 。
    • 第五年100%进入第5桶。
    • 第6年,80%进入第5桶,20%进入第10桶。其公式为: 1- ( 6 -5)/(10-5) =0.8,其相邻细胞(6-5)/(10-5)。
    • ...and等等..。

我希望这能让事情更清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-16 20:40:40

你可以这样做。它把它按照你在帖子中要求的格式写成:

代码语言:javascript
复制
function bucketize(numberList, buckets) {
    // buckets must contain values sorted from smallest to largest
    var bucketized = [];
    var i, j, lowBucket, difference, bucketSpan, ratio;

    for (i=0; i<numberList.length; i++) {
        bucketized[i]=new Array(buckets.length + 1);
        bucketized[i][0]=numberList[i];
        lowBucketIndex=null;

        for (j=0; j<buckets.length; j++) {
            if (lowBucketIndex === null && numberList[i] < buckets[j]) {
                lowBucketIndex=j-1;
                if (lowBucketIndex < 0) {
                    // this bucket gets it all
                    bucketized[i][j+1]=1;
                } else {
                    //divide this value between buckets
                    difference = numberList[i] - buckets[lowBucketIndex];
                    bucketSpan = buckets[j] - buckets[lowBucketIndex];
                    ratio=difference/bucketSpan;
                    bucketized[i][lowBucketIndex+1] = 1-ratio;
                    bucketized[i][j+1] = ratio;
                }
            } else {
                bucketized[i][j+1]=0;
            }
        }
        if (lowBucketIndex === null) {
            bucketized[i][buckets.length] = 1;
        }
    }

    return bucketized;
}

var buckets = [2,3,5,10];
var numberList=[1,2,3,4,5,6,7,8,9,10];
var bucketized = bucketize(numberList, buckets);
var i;

for (i=0; i<bucketized.length; i++) {
    console.log(bucketized[i].join(','));
}

这是一个小提琴

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

https://stackoverflow.com/questions/25844634

复制
相关文章

相似问题

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