во время технического интервью для роли разработчика с полным стеком я оказался в знакомой, но неожиданно сложной ситуации. Все шло гладко, пока интервьюер не представил мне задачу, которая сначала казалась простой.
]] «Можете ли вы отсортировать эти имена файлов так, как они появятся в исследователе файла, в порядке возрастания?» они спросили.
я подумал: «Кусок торта». Сортировка - это такая фундаментальная операция, что я не ожидал каких -либо проблем. Но как только я начал писать код, я попал в заглушку. Имена файлов были повсюду, некоторые были простыми, но другие включали цифры, буквы и комбинации обоих.
] я попытался использовать базовый метод сортировки строк, например:
array.sort ();
Но это дало нечетный результат. Числа были отсортированы лексикографически (то есть «10» поступает до «2», потому что они начинаются с «1»), а смешанные буквенно -цифровые струны не были в правильном порядке. Это был беспорядок, и он вообще не напоминал естественный порядок, который вы видите в исследователях файлов.
я чувствовал, как часы и наращивание давления. Я пытался выполнить различные функции сравнения, чтобы правильно обрабатывать цифры, но ничто не щелкнуло.
тогда я вспомнил простой трюк, о котором я читал не так давно: Localecompare.
localecompare позволяет вам сравнивать строки таким образом, чтобы имитировать, как люди сортируют. Используя его с числовой опцией, он обрабатывает числа как фактические числа, а не сравнивая их как текст. Вот код, который я использовал:
]
array.sort ((a, b) => a.localecompare (b, undefined, {numeric: true, чувствительность: 'base'}));
Эта единственная строка кода сортировала имена файлов точно так же, как исследователь файлов: цифры были заказаны естественным образом, и комбинации букв/номеров были обработаны плавно.
, как только я запустил код, я увидел правильный заказ на экране. Имена файлов были идеально отсортированы в порядке возрастания, как и в исследователе файла. Я улыбнулся, объяснив решение интервьюеру, который, казалось, был доволен тем, как я решил проблему.
]то, что изначально казалось сложной проблемой, закончилась тем, что решается с простым, элегантным решением. Это было напоминанием о том, что иногда самые эффективные инструменты являются самыми простыми, и знание этих маленьких уловок может иметь все значение.
] ] ]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3