Несмотря на то, что я художник, мне нужно вернуть статистический режим из массива чисел. Я хочу, чтобы функция избегала использования ассоциативных массивов (так как мне нужна версия для работы в JavaScript, а также в Maxscript, и было бы лучше использовать одну и ту же базу кода) Maxscript не использует ассоциативные массивы; что жаль, как this является довольно хорошим решением.Получить статистический режим в Javascript без использования ассоциативных массивов
Приведенный ниже код работает в первом примере, но не во втором. По предположению, я бы сказал, что массив нуждается в сортировке заранее, но это не сработало (и я опустил его из кода) Может ли кто-нибудь указать, где я ошибаюсь? Спасибо.
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;
}
Это звучит как хороший подход. Что произойдет, если есть два числа, которые являются режимом [2,2,4,4], например? –
@GhoulFool, если есть два номера режимов, вам нужно решить, какой из них выбрать ... – Alnitak