Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.10.2006, 22:35
SiDDD вне форума Посмотреть профиль Отправить личное сообщение для SiDDD Найти все сообщения от SiDDD
  № 1  
Ответить с цитированием
SiDDD

Регистрация: Oct 2006
Сообщений: 26
По умолчанию String в роли массива..

Вот такая ещё беда у меня Так как с массивами пошло не очень - хотелось бы знать реально ли использовать на ролях массива обычный 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;
};
Вопрос вот в чем - как наиболее просто изменить в String'е один или цепочку символов? Есть такой вариант или в моём примере предложен самый простой???

Старый 16.10.2006, 22:59
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну... можно еще так:
Код:
var str1:String = "1234567";
var str2:String = "";
str2 = str1.split(str1.charAt(3)).join("x");
Ну не на много лучше канеш, но все, что пришло в голову...
Это, конечно, если сиволы не повторяются =)
__________________
Hell is the possibility of sanity

Старый 16.10.2006, 23:05
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от SiDDD
Так как с массивами пошло не очень - хотелось бы знать реально ли использовать на ролях массива обычный String?
Я так и не понял, а какой смысл перехода с массива на строки? В том, что массивы не копируются легко? Ну пока ни кто от этого не умер.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 16.10.2006, 23:44
SiDDD вне форума Посмотреть профиль Отправить личное сообщение для SiDDD Найти все сообщения от SiDDD
  № 4  
Ответить с цитированием
SiDDD

Регистрация: 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")...
или

Код:
var sMap:String=""12x@ti8";
if(myString.substr(X,3)=="ABC")...
А если массив состоит из нескольких тысяч символов??? Кавычки сниццо будут потом ещё неделю И что самое приятное - String таки копируется а не "раздает" указатели на себя. Вобщем я в раздумьях... А что работает быстрее - String или Array???


Последний раз редактировалось iNils; 16.10.2006 в 23:46.
Старый 16.10.2006, 23:54
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. Проблема с набиванием решается так:
Код:
//// набили так
str = "1234567";
//// сделали массив
arrayA = str.split ("");
2. Почему вы в массивах с двухмерными работаете массивах, а со строками - одномерными? Тогда вы без for одним concat легко обойдетесь. Даже елс ии массив многомерный, что страшного в цикле?
3. Со стороками лишаетесь ряда методов, таких как сортировка.
4. Указатели может и плохо, но часто это и хорошо.

Я бы на вашем месте не изобретал бог знает что, а работал с массивами. И потом какой суммарной размерности у вас массив? 10'000, 100'000?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.10.2006, 00:20
SiDDD вне форума Посмотреть профиль Отправить личное сообщение для SiDDD Найти все сообщения от SiDDD
  № 6  
Ответить с цитированием
SiDDD

Регистрация: 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"; ...и т.д.) Для строки это казалось прощще...но только казалось

Старый 30.11.2007, 00:42
Sy_2007 вне форума Посмотреть профиль Отправить личное сообщение для Sy_2007 Найти все сообщения от Sy_2007
  № 7  
Ответить с цитированием
Sy_2007

Регистрация: Nov 2007
Сообщений: 40
А могу я туда вставить не "uaaaaaaa" а (0...255)?

Старый 30.11.2007, 14:01
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
String.prototype.__resolve = function(p){
	if(!isNaN(p)){
		return this.charAt(p);
	}
}
var a:String = "abcdefghjklmo";
trace(a[3]);

Единственное, что нужно понимать, что возвращенное значение будет не ссылкой на символ строки, а новой строкой, так что
Код:
a[3] = "z";
Не изменит изначальную строку

ЗЫ. Почему-то такая кончтрукция (попытка создать геттер\сеттеры не увенчалась успехом %) Но чего-то думать, как бы это обойти не хочется %)
Код:
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.
Старый 01.12.2007, 03:49
B0Bka вне форума Посмотреть профиль Отправить личное сообщение для B0Bka Найти все сообщения от B0Bka
  № 9  
Ответить с цитированием
B0Bka
 
Аватар для B0Bka

Регистрация: May 2004
Сообщений: 136
Отправить сообщение для B0Bka с помощью ICQ
разводить демогогию не буду но скажу что когда юзал обработку около 2000 xml файлов через DOM с массивами, память нещадно утекала, когда перешел на SAX и данные в памяти хранил в строках жить стало проще жить стало веселее, но это выбирается конкретно для каждой задачи
(прежде чем перейти с массивов пришлось перестроить структуру xml файлов чтобы оптимизировать поиск совпадений по ним)
если бы это была прога на с++ или даже на java я бы не когда не занялся таким извращением.
так что SiDDD ты не один такой

RegExp рулит


Последний раз редактировалось B0Bka; 01.12.2007 в 03:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.