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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.11.2014, 22:06
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 11  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
типа тоже вариант
Код AS3:
private function convertToString(obj:Object, parents:String="", level:int = 0 ):void
{
	var key:String;
	var keys:Array = [];
	var values:Array = [];
	for ( key in obj ) 
	{
		keys.push(key);
		values.push(obj[key]);
	}
	var indxes:Array = keys.sort(Array.RETURNINDEXEDARRAY);
	for (var i:int = 0; i < indxes.length; i++) 
	{
		var j:int = indxes[i];
		var subObj:*= values[j];
		key = keys[j];
		if (subObj is String)
		{
 
			var pfx:String = i ? "" : parents;
			res += pfx + key + "=" + subObj + "\n";
 
		}else
		{
 
			var del:String = level == 1 ?"=" : "";
			convertToString(obj[key], parents + del+key, level + 1);
 
		}
 
	}
 
}
ну и эта, вы бы правила-то сформулировали, по какому принципу у key11 есть родительский префикс, а у key12 его нет? по какому принципу сортируем, какие варианты вложенности и длин и т.п.
по правилам-то спокойнее, глядишь и извращаться не придется

Старый 08.11.2014, 22:21
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 12  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
Сообщение от silin
у key11 есть родительский префикс, а у key12 его нет
Его не то что бы нету. Там просто дерево без вайтспейсов получается. А единственное правило я озвучил - второй уровень от последнего "листка" дерева в направлении корня.
Как-то так. Проще по кейсам из тестов понять. Я сам это из автора по слову выгрызал

Добавлено через 4 минуты
Самое интересное в
Код:
obj_epic
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Jan 2013
Сообщений: 322
Код AS3:
function linear(obj:Object, level:int = 0, header:String = "", withTree:Boolean = false):String{
	var stack:Array = [];
	stack.push( { value: obj, key: header, level: level } );
	var result:String = "";
	var currentOwner:Object;
	while(stack.length){
		var current:Object = stack.pop();
		if (current.level !== 1) {
			if(current.level === 2){
				if (withTree) {
					result += "\n" + new Array(currentOwner.level).join("\t");
				}
				result += currentOwner.key + "=";
			}
			if(withTree){
				if (result.length) result += "\n";
				result += new Array(current.level).join("\t");
			}
			result += current.key;
		}
		else currentOwner = current;
 
		if(!(value is String)){
			var keys:Vector.<String> = new Vector.<String>();
			var key:String;
			for (key in current.value) {
				keys.push(key);
			}
			keys.sort(Array.DESCENDING);
			for(var i:uint = 0; i < keys.length; i++){
				key = keys[i];
				stack.push({value: current.value[key], key: key, level: current.level + 1});
			}
		}else result += "=" + current.value;
	}
	return result;
}
 
function recursive(value:Object, level:int = 0, key:String = "", withTree:Boolean = false):String{
	var result:String = "";
	if(level !== 1){
		if (withTree) {
			if (level > 1) result += "\n";
			result += new Array(level).join("\t");
		}
		result += key;
	}
	if(!(value is String)){
		var keys:Vector.<String> = new Vector.<String>();
		var _key:String;
		for (_key in value) {
			keys.push(_key);
		}
		keys.sort(0);
		for(var i:uint = 0; i < keys.length; i++){
			_key = keys[i];
			if(level === 1){
				if(withTree){
					result += "\n" + new Array(level).join("\t");
				}
				result += key + "=";
			}
			result += recursive(value[_key], level + 1, _key, withTree);
		}
		return result;
	}else return result + "=" + value;
}
Код AS3:
private function recursive(value:Object, level:int = 0, key:String = ""):String{
	var result:String = "";
	if(level !== 1){
		result += key;
	}
	if(!(value is String)){
		var keys:Vector.<String> = new Vector.<String>();
		var _key:String;
		for (_key in value) {
			keys.push(_key);
		}
		keys.sort(0);
		for(var i:uint = 0; i < keys.length; i++){
			_key = keys[i];
			if(level === 1){
				result += key + "=";
			}
			result += recursive(value[_key], level + 1, _key);
		}
		return result;
	}else return result + "=" + value;
}
Код:
main1=
	key1
		key11=text1
		key12=text2
main1=
	key2
		key21=text1
		key22=text2
main2=
	key1
		key11=text1
		key12=text2
		key13
			key131=text1
			key132=text2
main2=
	key2
		key21=text1
		key22=text2
main3=
	key1=text1

Старый 09.11.2014, 00:06
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 14  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Почти

Вот так должно быть
Код:
main1=
	key1
		key11=text1
		key12=text2
main1=
	key2
		key21=text1
		key22=text2

main2=
	key1
		key11=text1
		key12=text2
	key1=
		key13
			key131=text1
			key132=text2
main2=
	key2
		key21=text1
		key22=text2

main3
	key1=text1
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 09.11.2014, 01:57
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 15  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Dukobpa3, ааа, я правило проглядел, пичаль что уже сплю

Старый 09.11.2014, 02:12
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 16  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
GrafMine, может быть Ваш велосипед не совсем актуальный?
__________________
return this...

Старый 09.11.2014, 02:27
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 17  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
GrafMine, может быть Ваш велосипед не совсем актуальный?
а что в этой ссылке велосипедного?

Старый 09.11.2014, 03:03
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 18  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от GrafMine Посмотреть сообщение
а что в этой ссылке велосипедного?
Я посмел предположить, что Вы хотите создать универсальный "отладочный" метод, дабы мониторить все вложености свойств объекта
__________________
return this...

Старый 09.11.2014, 03:34
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 19  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
ЮнитТесты? Не, не слышал. ТДД? А что это?
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 09.11.2014, 22:59
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 20  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Код AS3:
function linear(obj:Object, level:int = 0,withTree:Boolean = false):String{
	var stack:Array = [];
	stack.push( { value: obj, key: "", level: level } );
	var result:String = "";
	var turn:Array = [];
 
	while(stack.length){
		var current:Object = stack.pop();
		turn.push(current);
		if(!(current.value is String)){
			var keys:Vector.<String> = new Vector.<String>();
			var key:String;
			for (key in current.value) {
				keys.push(key);
			}
			keys.sort(Array.DESCENDING);
			for(var i:uint = 0; i < keys.length; i++){
				key = keys[i];
				stack.push({value: current.value[key], key: key, level: current.level + 1, parent: current});
			}
		}else {
			if(current.level > 2){
				current.parent.parent.isOwner = true;
			}
			current.isPrimitive = true;
		}
	}
	var prevIsPrimitive:Boolean = false;
	var prevPrimitive:Object = null;
	for (var j:uint = 0; j < turn.length; j++ ) {
		current = turn[j];
		if (current.level > 1 && current.parent.isOwner && !current.isPrimitive) {
			if (withTree) {
				result += "\n" + new Array(current.parent.level).join("\t");
			}
			result += current.parent.key + "=";
		}
		else if (current.isPrimitive) {
			if (prevPrimitive && prevPrimitive.parent !== current.parent || !prevIsPrimitive) {
				if (withTree) {
					result += "\n" + new Array(current.parent.level).join("\t");
				}
				result += current.parent.key;
				prevIsPrimitive = true;
				prevPrimitive = current;
			}
			if (withTree) {
				result += "\n" + new Array(current.level).join("\t");
			}
			result += current.key + "=" + current.value;
		}else {
			prevIsPrimitive = false;
		}
	}
	return result;
}
лол

Dukobpa3, а если
Код:
{
	main1: {
		key1: {
			key11: "text1",
			key12: {
				key111: "text1"
			},
			key13: "text1"
		}
	}
};
у вас:
Код:
main1=
	key1
		key11=text1
	key1=
		key12
			key111=text1
			key13=text1
у меня:
Код:
main1=
	key1
		key11=text1
	key1=
		key12
			key111=text1
	key1
		key13=text1

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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