Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как присвоить элементы массива в "перетасованном" виде другому массиву?

Ответить
Настройки темы
[решено] Как присвоить элементы массива в "перетасованном" виде другому массиву?

Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


В процессе работы мой скрипт получает массив (далее $m1), его элементы нужно в произвольном порядке присвоить второму массиву (далее $m2). _ArraySwap не подойдет, потому что $m1 должен сохраниться в неизменном состоянии. В идеале нужна функция, на входе получающая $m1 и в процессе работы заполняющая $m2 элементами произвольного порядкового номера из $m1. Один и тот же лемент $m1 дважды и более попадать в $m2 не должен. Количество элементов в массивах одинаково. Пример:
на входе $m2 пустой, $m1 имеет значения:
1 2 3 4 5

на выходе $m1 такой как и раньше, $m2 имеет значения:
2 5 3 1 4
или
3 1 4 5 2.

Отправлено: 12:15, 27-09-2009

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <Array.au3>
Local $n = 9
Local $aM1[10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Local $aM2[10]
$aM_Tmp = $aM1
For $i = 0 to $n
   $iRnd = Random(0, $n - $i, 1)
   $aM2[$i] = $aM_Tmp[$iRnd]
   _ArrayDelete($aM_Tmp, $iRnd)
Next
_ArrayDisplay($aM1)
_ArrayDisplay($aM2)
Без обид, evg64
Но от тебя столько простых вопросов, что складывается впечатление, что ты совсем не хочешь думать и придумывать, а всегда хочешь получить готовые ответы. Буду рад ошибиться, и ты на самом деле делаешь огромное кол-во вещей сам, а где-то затрудняешься и спрашиваешь. Но меня на подобные мысли натолкнули уровень сложности задаваемых тобой вопросов - большинство из них уровня Хелпа.
Еще раз без обид

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:00, 27-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


kaster, я спрашиваю только тогда, когда не знаю сам. Например, перед тем, как писать этот топик, я просмотрел функции вкладки ArrayManagement из UDF help (иногда гуглю перед постами). С функциями ArrayManagement мне прежде не доводилоь работать. + я не программер, а любитель-самоучка. Кроме АвтоИт нигде работать не умею --> мне, уж наверное, можно задавать хелп-вопросы)
P.S. Вопросы я стараюсь задавать как можно более конкретные. Например, эта функция станет частью скрипта объемом 200 строк (не стал же я весь скрипт просить написать).

Отправлено: 13:49, 27-09-2009 | #3


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


evg64, я тоже не программист, и тоже не знаком ни с одним языком (не считая паскаль в школе )
я, честно, не хотел обидеть или задеть
а по поводу гугла, на самом деле лучший справочник, это хелп + пара форумов
если тебе, действительно интересно, я вот например, сначала набросаю на бумаге, что я хочу сделать. потом по ключевым словам лезу в хелп. там где интерактивный поиск. опять же, если очень интересно, то вот как я поступил на примере твоего вопроса в теме
1. набросал на бумажке алгоритм следующего содержания
а) есть массив оригинал, из него надо сделать модифицированный массив - объявляем два массива
б) нужно взять произвольный элемент из первого массива - интуитивно я полез в хелп за словом Random, и нашел там одноименную функцию
в) объявил еще один массив (временный), чтобы не трогать первый
г) через рэндом возвращаем индекс для извлечения из первого массива
д) присваиваем этот элемент первому элементу второго массива
е) удаляем этот элемент из первого массива и формируем временный равный первому но без выбранного элемента, чтобы не было повторов - опять же в хелпе нашел ф-ию _ArrayDelete для этого
ж) у него элементов на 1 меньше, опять извлекаем произвольный индекс, но интервал при этом должен на 1 уменьшиться, т.к. одного элемента уже нет, и так по циклу, пока все элементы не будут присвоены второму массиву.

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

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 14:09, 27-09-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как присвоить элементы массива в "перетасованном" виде другому массиву?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как управлять "Начинать с экрана приветствия" или "Защита паролем" в св-вах заставки. Alex Konovalov Microsoft Windows 2000/XP 12 17-05-2016 19:27
Интерфейс - [решено] Как удалить папку "Моя музыка","Мои Картинки", "Мое видео"? verdix Microsoft Windows 2000/XP 3 03-10-2009 23:46
VBS/WSH/JS - [решено] Как добавить "сложное" значение в "бинарный" параметр реестра с помощью WSH 13Demon Скриптовые языки администрирования Windows 1 10-02-2009 09:47
Разное - [решено] Ярлык для запуска проводника в виде "Мой компьютер" Stefanov Microsoft Windows Vista 9 11-03-2008 11:52
отключить показ в "виде эскизов" в проводнике AHTOLLlKA Microsoft Windows NT/2000/2003 5 28-01-2008 13:08




 
Переход