Помогите пожалуйста со счетчиком.



  • Есть список со значениями в разброс. В итоге требуется подсчитать количество повторений каждого значения и получить данные в таком виде: 11;Апельсин, 3;Банан, 7;Груша, 3;Слива, 6;Яблоко
    Сделала по этому принципу. (
    Сортируем список через экшн "Сортировать".
    Заводим счетчик повторений каждого числа. Устанавливаем его на 1.
    В foreach с первым элементом ничего не делаем и сохраняем его в переменную. Со всеми остальными:

    если элемент равен предыдущему, увеличиваем счетчик на 1 и сохраняем его в переменную.
    если не равен, то пишем в ответ счетчик повторений/количество элементов в массиве x 100, после чего устанавливаем счетчик снова на 1 и сохраняем текущий элемент в переменную.)
    

    Считает все правильно, но проблема в том, что в нужном мне списке более миллиона значений, и эта конструкция обрабатывает его очень медленно . Подсказали, что можно сделать с помощью js
    const Counter = () => {
    let counts = Object.create(null);
    return {
    update(el) {
    if (el in counts)
    counts[el] += 1;
    else
    counts[el] = 1;
    },
    get(el) {
    return counts[el] || 0;
    },
    result() {
    return counts;
    },
    };
    };
    c = Counter();
    c.update("123");
    c.update("123");
    c.update("12312");
    console.log(c.result());
    console.log(c.get(123));

    Но что из этого куда прописывать, я разобраться не могу, помогите пожалуйста. 0_1553073283119_counter.xml



  • @wwwin
    Медленно отрабатывает именно сортировка или перебор элементов?



  • @xclsv Медленный перебор элементов. За сутки 20% списка обработал.



  • @wwwin Интересно как вам это удалось. тк это занимает секунду, ну пускай пару секунд.



  • @usertrue В целевом списке больше миллиона строк.



  • @wwwin Ну и что, это всеравно дело нескольких секунд при грамотном подходе.



  • @usertrue Согласна. Мне в Пайтоне сделали - обработка заняла 7 секунд. Однако мне нужно этот функционал прикрутить к своему скрипту. То, что у меня получилось - в скрипте в первом посте, однако работает медленно. Поэтому я попросила помощи с реализацией грамотного подхода.



  • @wwwin может, оно работает медленно, потому вы делаете это в режиме "записи"?



  • @wwwin У меня ваш скрипт не открылся, сейчас накидаю пример



  • @wwwin Вот скриптик, список из 10 миллионов чисел у меня обошел примерно за 40сек
    0_1553083793985_counter.xml



  • @usertrue Спасибо большое!



  • This post is deleted!

Log in to reply