Author Topic: Как обратиться к массиву  (Read 4228 times)

0 Members and 2 Guests are viewing this topic.

Prorok.18

  • Guest
Как обратиться к массиву
« on: May 16, 2015, 08:39:47 PM »
Как обратиться к массиву $number после того как переменной $number присвоили значение?
Code: (clickermann) [Select]
ARRPUSH($number,"text")
$number=1
« Last Edit: May 16, 2015, 08:48:14 PM by Prophet »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Как обратиться к массиву
« Reply #1 on: May 16, 2015, 09:26:51 PM »
Переменная превращается в массив если в нее записывают несколько строк командой ARRPUSH или указанием номера ячейки.

Code: (clickermann) [Select]
ARRPUSH($number,"text 1") // в ячейку 0
ARRPUSH($number,"text 2") // в ячейку 1

$number=1 // так не правильно но видимо запись идет в ячейку 0

LOGWRITE ("Массив: ", $number[0]) // выводим результат
LOGWRITE ("Массив: ", $number[1])
LOGWRITE ("Переменная: ", $number)

HALT

Quote
22:23:35 Массив: 1
22:23:35 Массив: text 2
22:23:35 Переменная: 1
Так что используй разные имена для переменных и массивов чтобы не путаться.

Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Как обратиться к массиву
« Reply #2 on: May 17, 2015, 09:45:59 AM »
Привет Всем! Я как всегда, чтобы не создавать новую тему, в какой-нибудь похожей напишу :)
Глупейшие, наверное вопросы, но я как-то это не использовал, а сейчас понадобилось, и не пойму - как?! :)
Так вот. Как использовать Arrpop?! :)

Элементарный сценарий на пример.

Code: (clickermann) [Select]
for($i=0,$i<14)
      arrpush($rp, $i)
end_cyc

Вот я задал 15 массивов. И да именно так, как есть. Мне в конце цикла нужно извлечь все эти массивы. Я понимаю, что при помощи функции arrpop, но как её использовать? Единственное, как она у меня работает, это как в примере print( arrpop($arr) ). Т.е. через принт. Если просто пишу arrpop($arr), то ничего не происходит, - почему?! Как её использовать? Через принт мне не пойдёт. Вот элементарное примеры, как нужно. Первое так же через цикл:

Code: (clickermann) [Select]
for($i=0,$i<14)
   ARRPOP($rp[$i])
end_cyc
//или
for($i=0,$i<14)
   ARRPOP($rp)
end_cyc

Так, не работают почему то?! И я не понимаю, как её прописывать, чтобы извлечь все массивы?

Ещё вопрос, это как бы это можно было бы через цикл использовать, чтобы ещё проще, тоже не пойму.

Code: (clickermann) [Select]
WHILE($rp=0)
   ARRPOP($rp)
END_CYC
Т.е. если вы подскажите, как использовать arrpop, то я ещё не понял, как использовать вайл, т.е., что нужно в скобках прописать, чтобы он сам себя проверял, что пока ещё есть хотя бы один массив, он продолжает извлечение пока всех не будет.
Спасибо, Большое :)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Как обратиться к массиву
« Reply #3 on: May 17, 2015, 10:06:32 AM »
Ты ж не написал куда извлекать.
Code: (clickermann) [Select]
for($i=0,$i<14)
   arrpush($rp, $i)
end_cyc

for($i=0,$i<14)
   $massiv = ARRPOP($rp) // извлекаем например в переменную
   LOGWRITE ("Массив: ", $massiv) // смотрим что в переменной
end_cyc

HALT

Но надо помнить что функция ARRPOP извлекает и удаляет последний элемент массива. Тоесть возвращает значения с конца.

Вот другой вариант извлечения данных от начала и до конца массива.
Функцией ARRSIZE($rp) можно определить размер массива
Code: (clickermann) [Select]
for($i=0,$i<14)
   arrpush($rp, $i)
end_cyc

for($i=0,$i<ARRSIZE($rp))
   $massiv = $rp[$i]
   LOGWRITE ("Массив: ", $massiv)
end_cyc
UNDEFINE($rp) // обнуляем массив

HALT
При этом значения массива не удаляются, и чтобы их удалить нужно использовать команду UNDEFINE.
« Last Edit: May 17, 2015, 10:08:15 AM by Oraven »

Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Как обратиться к массиву
« Reply #4 on: May 17, 2015, 04:50:31 PM »
Блин, чё-то я не понял, что именно делает arrsize? В описании - возвращает кол-во элементов в массиве. Куда возвращает, и что это значит? Мудрил, мудрил, но так и не понял. И я не понял, что именно ты сделал этим примером? Что-то как-то не доходит. И вот эта последняя строчка UNDEFINE($rp) - она сразу все 15 массивов обнуляет? А на счёт arrpop - да я знаю, что с конца, мне как бы всё равно, мне лишь бы массивы, как бы убрать. И можно ли ведь такое через While сделать?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Как обратиться к массиву
« Reply #5 on: May 17, 2015, 04:56:16 PM »
... И вот эта последняя строчка UNDEFINE($rp) - она сразу все 15 массивов обнуляет? А на счёт arrpop - да я знаю, что с конца, мне как бы всё равно, мне лишь бы массивы, как бы убрать. И можно ли ведь такое через While сделать?
Хммм...
Массив один $rp, а в нём 15 элементов.
UNDEFINE($rp) удаляет весь массив, сколько бы элементов он не содержал.

Блин, чё-то я не понял, что именно делает arrsize? В описании - возвращает кол-во элементов в массиве. Куда возвращает, и что это значит?
Куда вставиш туда и возвращает. Вместо ARRPOP($rp) будет в итоге число, которое функция вернёт.



Skomopox

  • Освоившийся
  • **
  • Posts: 56
    • View Profile
Re: Как обратиться к массиву
« Reply #6 on: May 18, 2015, 05:56:50 AM »
Привет Игорь! Скажу так. Я так и не понимаю, что значит возвращает? Т.е.,что он делает этим? Но пока можно не отвечать, хоть я хотел очень разобраться в этом, чтобы не спрашивать каждый раз, как делать, а самому понимать, как происходит этот процесс.
Но, чтобы не путать себя сейчас, я разобрался, как мне надо. Поэтому огромное Спасибо за то, что объяснил про undefine. Во первых я даже не знал, что его к массивам можно применять :), а во вторых это за то, что объяснил, что массив один, а в скобках  - это элементы. И что Undefine может удалить весь массив. Сейчас многое прояснилось вообще :) Спасибо. В общем просто сейчас без всяких arrsize и arrpop просто пишу это UNDEFINE($rp) и всё, и у меня всё работает, пока, как мне надо. Благодарю :)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Как обратиться к массиву
« Reply #7 on: May 18, 2015, 06:58:43 AM »
возвращает, значит кликер видит вместо функции некое значение. Его либо записывают в переменную либо сразу используют в другой функции.

Размер массива $rp 14 ячеек
Для кликера строчка
Code: (clickermann) [Select]
for($i=0,$i<ARRSIZE($rp))Будет выглядеть так
Code: (clickermann) [Select]
for($i=0,$i<14)

Prorok.18

  • Guest
Re: Как обратиться к массиву
« Reply #8 on: May 18, 2015, 07:30:33 PM »
Oraven, не подскажешь, что изменить в коде, чтоб цвета генерелись по убывающей? Поменять r и b местами в colorgen?
Code: (clickermann) [Select]
$clm = 4 // уровень коррекции от 0 до 8
 
SWITCH($clm)
CASE(0)
   $bit=1
CASE(1)
   $bit=2
CASE(2)
   $bit=4
CASE(3)
   $bit=8
CASE(4)
   $bit=16
CASE(5)
   $bit=32
CASE(6)
   $bit=64
CASE(7)
   $bit=128
CASE(8)
   TFWRITE(STRCONCAT("Цвета для Уровня ", $clm,".txt"), 0)
   $bit=256
DEFAULT
   HINTPOPUP("Задан не верный уровень коррекции!", "Ошибка")
   halt
END_SWITCH
 
$r=-1
$g=-1
$b=-1
inc($r,$bit)
inc($g,$bit)
inc($b,$bit)
WHILE($b < 256)
   WHILE($g < 256)
      WHILE($r < 256)
         TFWRITE(STRCONCAT("Цвета для Уровня ", $clm,".txt"), colorgen($r,$g,$b))
         inc($r,$bit)
      END_CYC
      $r=-1
      inc($r,$bit)
      inc($g,$bit)
   END_CYC
   $r=-1
   $g=-1
   inc($r,$bit)
   inc($g,$bit)
   inc($b,$bit)
END_CYC
 
halt
« Last Edit: May 18, 2015, 07:36:44 PM by Prophet »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Как обратиться к массиву
« Reply #9 on: May 18, 2015, 08:53:58 PM »
Вот, теперь генерирует сразу прямой и обратные списки, при этом используется запись в массив и только на последнем этапе происходит сброс списка в файл что ускоряет процесс за счет уменьшения доступа к диску.

Code: (clickermann) [Select]
$clm = 4 // уровень коррекции от 0 до 8

SWITCH($clm)
CASE(0)
   $bit=1
CASE(1)
   $bit=2
CASE(2)
   $bit=4
CASE(3)
   $bit=8
CASE(4)
   $bit=16
CASE(5)
   $bit=32
CASE(6)
   $bit=64
CASE(7)
   $bit=128
CASE(8)
   ARRPUSH($arr_out, 0)
   $bit=256
DEFAULT
   HINTPOPUP("Задан не верный уровень коррекции!", "Ошибка")
   halt
END_SWITCH

$r=-1
$g=-1
$b=-1
inc($r,$bit)
inc($g,$bit)
inc($b,$bit)
WHILE($b < 256)
   WHILE($g < 256)
      WHILE($r < 256)
         ARRPUSH($arr_out, colorgen($r,$g,$b))
         inc($r,$bit)
      END_CYC
      $r=-1
      inc($r,$bit)
      inc($g,$bit)
   END_CYC
   $r=-1
   $g=-1
   inc($r,$bit)
   inc($g,$bit)
   inc($b,$bit)
END_CYC

TFWRITEARR(STRCONCAT("Цвета для Уровня ", $clm," прямой порядок.txt"), $arr_out)
$count = ARRSIZE($arr_out)
FOR($a=0,$a<$count)
   ARRPUSH($arr_out2, ARRPOP($arr_out))
END_CYC
TFWRITEARR(STRCONCAT("Цвета для Уровня ", $clm," обратный порядок.txt"), $arr_out2)

halt
« Last Edit: May 18, 2015, 09:57:50 PM by Oraven »

Prorok.18

  • Guest
Re: Как обратиться к массиву
« Reply #10 on: May 18, 2015, 09:19:51 PM »
Интересное решение), но если нужен сразу обратный порядок?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Как обратиться к массиву
« Reply #11 on: May 18, 2015, 09:57:00 PM »
Интересное решение), но если нужен сразу обратный порядок?
Этот скрипт генерирует готовый список, потрать 5-10 секунд (зависит от компа) своего времени и пользуйся каким нужно списком.

Prorok.18

  • Guest
Re: Как обратиться к массиву
« Reply #12 on: May 18, 2015, 10:35:56 PM »
за 10 секунд ракета пролетит 100-150 км :(

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Как обратиться к массиву
« Reply #13 on: May 18, 2015, 11:03:19 PM »
Что за ракета со второй и почти третьей космической скоростью.
Бери попроще ракету. Кликермэн может управлять ракетой только до первой космической.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Как обратиться к массиву
« Reply #14 on: May 19, 2015, 08:19:58 AM »
Каких 10 сек
Code: [Select]
времени затрачено: 2726 мс
И не нужно список формировать во время работы основного скрипта. Списки нужно подготовить предварительно.