Я твердо верю в то, что языки программирования - это инструменты, и знание того, что вы умеете решать проблемы, значительно облегчит вашу жизнь. Что верно и в случае этой проблемы.

Итак, сегодня я наткнулся на эту статью https://bitsofco.de/removing-duplicate-objects-from-an-array-is-hard/, в которой рассказывается о том, как сложно (с точки зрения вычислений) удалить повторяющиеся элементы. из массива в случае непримитивных типов, таких как объекты.

Теперь решение, предложенное автором, не очень хорошее, я согласен, но он показывает отличный трюк, который я только что изучил для примитивных данных, и теперь я так решил использовать его. Но дело в том, что это действительно проблема. Вы можете получить эту идею, если поищете эту проблему в Google, вы найдете так много контента со всеми видами подходов и всеми сложными решениями. Итак, это хорошо известная проблема, с которой люди сталкиваются изо дня в день.

Теперь, как мы можем решить эту проблему, используя преимущества вашего инструмента.

Это моя реализация для решения той же проблемы с использованием символов JavaScript (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol). По сути, символы - это способ генерировать значения, которые внутренне представлены как разные значения при каждом вызове функции. Но Symbol.for (кошка) позволяет вам создать глобальный символ, и при каждой конструкции будет возвращаться одно и то же значение.

Теперь, используя этот подход, мы сначала преобразуем массив в массив символов, а затем мы можем использовать ту же идею наличия примитивов и удаления дубликатов, и это в основном.

Впоследствии я провел несколько тестов просто для удовольствия, и оказалось, что это решение тоже довольно масштабируемое. Вот некоторые результаты: -

  • Для 100 элементов или около того требуется около 5,5 мс, тогда как подход, использованный в исходной статье, занимает 2,2 мс.
  • Для 500 элементов или около того это занимает 5,7 мс, тогда как другой алгоритм занимает 11,7 мс.
  • Для 1500 элементов или около того это занимает 3,886 мс, тогда как другой алгоритм занимает 32,82 мс.
  • Для 8000 элементов или около того требуется 5,57 мс, тогда как для другого алгоритма требуется 60,71 мс.

И после этого мне, очевидно, стало скучно, поэтому, если кто-то сочтет это полезным и проведет какое-то тестирование на более крупных и, возможно, более реальных данных, я хотел бы узнать статистику.

Если вы хотите поговорить о реализации или о чем-то еще, вы можете найти меня в Instagram или Twitter под именем @vipulbhj.

Большое спасибо за чтение, не забудьте поделиться, если вы найдете информацию полезной.