![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2006
Сообщений: 26
|
Вот такая ещё беда у меня
Так как с массивами пошло не очень - хотелось бы знать реально ли использовать на ролях массива обычный String? С чтением из оного всё шло просто на ура! Из любой точки, в любое время - всегда пожалуйста (string.charAt(nn) или substr работают исправно). Но как дело дошло до записи всё снова усложнилось...Для простоты на данном примере (Code.rar) пытаюсь изменить только 4-й символ на "x": var s1:String="0123456789";
var s2:String;
_root.onEnterFrame=function(){
s2=s1;
s2.charAt(3)="x"; // Выдает ошибку - т.к. только для чтения
s2[3]="x"; // Автоматически создается массив - тоже не то
s2(3)="x"; // Эххх мечты-мечты - не работает
s2=s1.substring(0,3) + "x" + s1.substring(4,10); // Работает исправно, но усложняет код
txt1.text=s1;
txt2.text=s2;
};
|
|
|||||
|
Modus ponens
|
Ну... можно еще так:
var str1:String = "1234567";
var str2:String = "";
str2 = str1.split(str1.charAt(3)).join("x");
Это, конечно, если сиволы не повторяются =)
__________________
Hell is the possibility of sanity |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 26
|
Ув. iNils - дело было так:
Начиналось с массивов. Пока необходимости в их клонировании небыло - всё было ок. Втож время, как вариант, попробовал String - для чтения просто чудо! К примеру, как по вашему лучше: var myArray:Array=(new Array("1","2","x","@","t","i","8"),
if(myArray[y][x]=="A" && myArray[y][x+1]=="B" && myArray[y][x+2]=="C")...
А если массив состоит из нескольких тысяч символов??? Кавычки сниццо будут потом ещё неделю И что самое приятное - String таки копируется а не "раздает" указатели на себя. Вобщем я в раздумьях... А что работает быстрее - String или Array???Последний раз редактировалось iNils; 16.10.2006 в 23:46. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
1. Проблема с набиванием решается так:
2. Почему вы в массивах с двухмерными работаете массивах, а со строками - одномерными? Тогда вы без for одним concat легко обойдетесь. Даже елс ии массив многомерный, что страшного в цикле? 3. Со стороками лишаетесь ряда методов, таких как сортировка. 4. Указатели может и плохо, но часто это и хорошо. Я бы на вашем месте не изобретал бог знает что, а работал с массивами. И потом какой суммарной размерности у вас массив? 10'000, 100'000? |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 26
|
1. Как вариант вот подумалось: Оригинал (в прошлом а1) хранить как строку а массив а2 получать из str.split ("") ...хотя оригинал то всё равно менять нужно. Хех.;
2. Одномерные/двумерные - это был только пример придуманный на ходу (не приводить же весь исходник!) На деле все многомерное. String конечно один но условно поделен на строки шириной Wdth - координату получал как Y*Wdth+X. 3. Сказать по правде - массив играет роль карты. Зачем сортировать карту? 4. Не спорю. зы. А как быть с возможностью изменения сразу нескольких ячеек? (Arr[1][1]="1"; Arr[1][2]="2"; Arr[1][3]="3"; ...и т.д.) Для строки это казалось прощще...но только казалось ![]() |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 40
|
А могу я туда вставить не "uaaaaaaa" а (0...255)?
|
|
|||||
|
Modus ponens
|
String.prototype.__resolve = function(p){
if(!isNaN(p)){
return this.charAt(p);
}
}
var a:String = "abcdefghjklmo";
trace(a[3]);
![]() Единственное, что нужно понимать, что возвращенное значение будет не ссылкой на символ строки, а новой строкой, так что Не изменит изначальную строку ЗЫ. Почему-то такая кончтрукция (попытка создать геттер\сеттеры не увенчалась успехом %) Но чего-то думать, как бы это обойти не хочется %) String.prototype.__resolve = function(p){
if(!isNaN(p) && p<this.length){
this.___prop = "."+this.charAt(p);
this.gfunc = function(){
return this.___prop.charAt(1);
}
this.sfunc = function(_p){
this.split(this.___prop.charAt(1)).join(_p);
}
this.addProperty(this.charAt(p), this.gfunc, this.sfunc);
return this.gfunc();
}
}
var a:String = "abcdefghjklmo";
trace(a[3]);
a[3] = "z";
trace(a);
String.prototype.__resolve = function(p){
if(!isNaN(p) && p<this.length){
this.___prop = "."+this.charAt(p);
this.gfunc = function(){
return this.charAt(p);
}
this.sfunc = function(_p){
this.split(this.___prop.charAt(1)).join(_p);
}
this.addProperty(this.___prop, this.gfunc, this.sfunc);
if(this[this.___prop] == undefined) this[this.___prop] = this.charAt(p);
return this[this.___prop];
}
}
var a:String = "abcdefghjklmo";
trace(a[3]);
trace(a["___prop"]);
trace(a[".d"]);
a[3] = "z";
trace(a);
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 30.11.2007 в 14:39. |
|
|||||
|
разводить демогогию не буду но скажу что когда юзал обработку около 2000 xml файлов через DOM с массивами, память нещадно утекала, когда перешел на SAX и данные в памяти хранил в строках жить стало проще жить стало веселее, но это выбирается конкретно для каждой задачи
(прежде чем перейти с массивов пришлось перестроить структуру xml файлов чтобы оптимизировать поиск совпадений по ним) если бы это была прога на с++ или даже на java я бы не когда не занялся таким извращением. так что SiDDD ты не один такой ![]() RegExp рулит Последний раз редактировалось B0Bka; 01.12.2007 в 03:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|