即使我是一名艺术家,我也发现需要从一组数字中返回统计模式。我希望该函数避免使用关联数组(因为我需要在 JavaScript 和 Maxscript 中运行的版本,并且最好使用相同的代码库) Maxscript 不使用关联数组;这是一个遗憾,因为这是一个相当好的解决方案。
下面的代码在第一个示例中有效,但在第二个示例中无效。猜测我会说数组需要事先排序,但这不起作用(我已经从代码中省略了它)有人能指出我哪里出错了吗?谢谢你。
var textArr = new Array();
arrOne = [0,1,0,2,3,10,10]
arrTwo = [1,2,3,1,1,1]
mode_without_associative_arrays(arrOne) // works fine
mode_without_associative_arrays(arrTwo) // doesn't work
function mode_without_associative_arrays(arr)
{
if(arr.length == 0)
return null;
var collectArr = []; // array
var countArr = [] // array to hold the count of each element in collectArr
collectArr[0] = arr[0]
countArr[0] = 1
var mode = arr[0]
maxCount = 1;
for(var i = 0; i < arr.length; i++)
{
var ele = arr[i];
for(var j = 0; j < collectArr.length; j++)
{
var addMe = false;
if (collectArr[j] != ele) addMe = true
}
if (addMe == true)
{
collectArr.push(ele)
countArr.push(1)
}
else
{
// count it up
countArr[j]+=1
if (countArr[j] > maxCount)
{
maxCount = countArr[j]
mode = ele
}
}
}
alert("Mode is " + mode + " which appears " + maxCount + " times!")
return mode;
}