动态创建分档?

时间:2017-11-26 23:59:03

标签: arrays algorithm coldfusion

我有一个用户应输入垃圾箱数量的项目。此数字的范围为0到1000.如果用户例如选择10,则下一步将检查数组中的最高值。数组包含数值。这是一个例子:

<cfset myArray = [5,45.74,9,21,88.78,33.56,12]>

我需要在数组中找到最高值。例如,在数组中,最高值为88.78。我们可以将此值四舍五入为89.然后我将最高值除以二进制数。然后我将能够设置每个bin的宽度。例如:

<!--- *** Get the highest value in an array. Based on the max value in the array we will now how many bins we need. *** --->
<cfset maxBinVal = Round(arrayMax(myArray))>

<!--- *** This value can be changed. Depends how many bins user wants. *** --->
<cfset numberOfBins = 10>

<!--- *** Divide highest value in the array with the number of bins. *** --->
<cfset binWidth = maxBinVal / numberOfBins>

<!--- *** Loop stops before hits the highest value. Increment for binWidth to include the highest value. *** --->
<cfset maxVal = maxBinVal + binWidth>
<cfset arrayOfBins = arrayNew(1)>

<cfloop from="#binWidth#" to="#maxVal#" step="#binWidth#" index="i">
    <cfset arrayAppend(arrayOfBins,#i#)>
</cfloop>

<cfloop array="#arrayOfBins#" index="key">
    <cfoutput>Bin Point: #key#<br></cfoutput>
</cfloop>

输出:

Bin Point: 8.9
Bin Point: 17.8
Bin Point: 26.7
Bin Point: 35.6
Bin Point: 44.5
Bin Point: 53.4
Bin Point: 62.3
Bin Point: 71.2
Bin Point: 80.1
Bin Point: 89

创建垃圾箱之后,下一步是将myArray中的每个值放入正确的bin / array中。这很棘手,我不确定这个问题的最佳方法/解决方案是什么。如果箱的数量是静态的/总是相同的,这将更容易。在这种情况下,我必须循环myArray并检查哪个bin值属于。这是一个例子:

<cfif 5 LTE 8.9>
  <cfset arrayAppend(array1, 5)>
<cfelseif 5 GT 8.9 AND 5 LTE 17.8>
  <cfset arrayAppend(array2, 5)>
<cfelseif ...>

依旧......

基本上我必须检查哪个范围值属于,然后追加value position in an array(示例5在myArray中的位置1,因此我想追加1)存储该bin的值。有一个原因我必须存储值的位置而不是值本身。最大的问题是弄清楚如果用户更改箱号,这是如何工作的。例如,如果不是10,用户选择12.然后我的if语句将是不同的。如果有人可以提供任何有用的帮助。提前致谢!

0 个答案:

没有答案
相关问题