Что нового

[Данные, строки] Можно ли в текстовом масиве исспользовать текстовую переменную

forfrends

Новичок
Сообщения
176
Репутация
3
Вот, еще вопросик
Есть масив
$sText[$i] = 'текст массива'

Может ли в таком масиве переменная $i быть текстовой?
Тоесть
$i = 'text'
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
нет. не может. индекс - исключительно целое положительное число


Добавлено:
Сообщение автоматически объединено:

gregaz
ты таким образом будешь возвращать каждый раз нулевой элемент массива. т.к. происходит неявное преобразование типов. а любая строка это есть 0


Добавлено:
Сообщение автоматически объединено:

Код:
$i = 'text1'
$j = 'text2'
Dim $a[2]
$a[$i] = 'str1'
$a[$j] = 'str2'
ConsoleWrite($a[$i] & @CRLF & $a[$j] & @CRLF)
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Просто если переменная будет числовой, то она слишком быстро достигнет своего максимального размера
В программе постоянно происходит умножение на 2, и переменная растет в прогрессии:
1,2,4,8,16,32... и т.д.
Через несколько десятков опреций программа выдаст ошибку: превышение размера переменной.
если переменную сделать текстовой, то открывается возможность совершить с десятки раз больше операций, ведь одной цифрой можно отметить лишь 10 единиц масива (0, 1, 2,... 8, 9), а одним символом (англ.) не менее 27! (a, b, c,... y, z).
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Kaster [?]
ты таким образом будешь возвращать каждый раз нулевой элемент массива. т.к. происходит неявное преобразование типов. а любая строка это есть 0
Да конечно это нонсенс и глупость моя
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
ты таким образом будешь возвращать каждый раз нулевой элемент массива. т.к. происходит неявное преобразование типов. а любая строка это есть 0
Значит нальзя? Жаль...
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
forfrends [?]
если переменную сделать текстовой, то открывается возможность совершить с десятки раз больше операций, ведь одной цифрой можно отметить лишь 10 единиц масива (0, 1, 2,... 8, 9), а одним символом (англ.) не менее 27! (a, b, c,... y, z).
Утопическая идея (т,к, допустимое кол-во элементов массива также ограничено )
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
forfrends
неправильные ты программы пишешь, если ты создаешь массивы с кол-вом индексов превышающих предел в 2^32-1. Если не поленишься и посчитаешь сколько памяти необходимо для хранения такого массива, то ты удивишься
для хранения пустого массива (на каждый элемент всего 1 байт) - у тебя уйдет 2 ГБ памяти.
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Ну дак, хоть помечтать :smile:
А вообще есть идеи о том как можно избежать переполнение переменной?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
а что значит избежать? учесть в программе что может произойти переполнение? вот есть тема хорошая по этому поводу http://autoit-script.ru/index.php?topic=739.msg5095#msg5095
ну а если, ты хочешь чтобы программа выдавала более менее приличные результаты для чисел превышающих максимальные значения, то как вариант можно работать с логарифмами чисел, если они положительные, конечно
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Плюс в том, что не каждый элемент масива будет иметь значение:
$sText[$i]
где [$i] = 1, 2, 4, 8, 16, 32, 64
Только ЭТИ числа. Тоесть элемента массива
$sText[$i] где [$i] = (допустим) 18 просто не существует
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Kaster сказал(а):
forfrends
...у тебя уйдет 2 ГБ памяти.
...что, по умолчанию, является пределом для программ в Windows.

forfrends сказал(а):
А вообще есть идеи о том как можно избежать переполнение переменной?
Проверяй переменную на максимально допустимое значение.



Добавлено:
Сообщение автоматически объединено:

А еще (в крайнем случае), вместо массива можно использовать структуру.
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Буду пробовать :IL_AutoIt_1:
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Автор - эта штука, которую ты предлагаешь, уже будет не массивом, а хешем :smile:
т.е. ассоциативным массивом. Реализовано в других языках, например, Perl.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
forfrends сказал(а):
Плюс в том, что не каждый элемент масива будет иметь значение:
$sText[$i]
где [$i] = 1, 2, 4, 8, 16, 32, 64
Только ЭТИ числа. Тоесть элемента массива
$sText[$i] где [$i] = (допустим) 18 просто не существует
Это очень плохой код.

Код:
Dim $aText[11]

For $i = 0 To UBound($aText) - 1
	$aText[$i] = '#' & 2 ^ $i
Next

For $i = 0 To UBound($aText) - 1
	ConsoleWrite($aText[$i] & @CR)
Next



Добавлено:
Сообщение автоматически объединено:

Кстати, максимальная длина массива 2^24, а не 2^32-1.

AutoIt Help сказал(а):
You can use up to 64 dimensions in an Array. The total number of entries cannot be greater than 2^24 (16 777 216).
 
Верх