Как правильно написать код вывода уникальных элементов массива?
У меня есть массив из 100 элементов, мне нужно вывести 10 элементов, так чтобы они не повторялись. Я уже написал код, но я думаю, он не совсем правильный. Какие варианты ещё существуют реализации этой задачи?
Код AS3:
|
Код AS3:
|
Спасибо за помощь, но я решил все же сам подумать над проблемой, перепробовал кучу вариантов и нашёл на мой взгляд самый лучший с помощью перемешивания всего массива.
Код AS3:
|
1. Формулировка "так, чтобы они не повторялись". Ну, ты можешь взять первые десять элементов, и они не будут повторяться)) У тебя даже слова "случайных" нет, можно только по коду догадаться.
2. Повторяемость вещь неоднозначная, когда речь идет о массиве. Ведь массив может быть из ста одинаковых ("повторяющихся") элементов ;) Потому что массив хранит не сами объекты, а ссылки на них. Так что все элементы могут ссылаться на один и тот же объект. В моем коде в выборку попадают только уникальные, но если в исходном массиве не наберется num уникальных, мой код зависнет (while() вообще потенциально опасен). 3. Почитай про методы массива, типа .slice(), .splice(). Вместо последнего цикла можно использовать вырезку, а можно сделать массив-копию через .concat() и обрезать через .length = num; |
Я с самого начала думал, сделать выборку элементов массива с помощью перемешивания, а потом вывода 5 первых элементов. Но всё же решил уточнить на форуме, посмотрел много вариантов реализации этого примера с помощью установки маркера flag, а так же нашёл исходники покера где выбирается 5 карт, там было сделано с помощью splice. Но в итоге я решил всё же остановится на выборе перемешивания и вывода пяти элементов. Мне нужно получить 5 уникальных неповторяющих значения и чтобы каждый раз они были новые. Здесь я уверен, что повторов не будет.
Добавлено через 2 минуты Цитата:
|
Часовой пояс GMT +4, время: 08:56. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.