|
|
|||||
.
|
Цитата:
А реальный пример вроде как был, потому что я на Array всегда пишу for по индексам, а вот кто-то из коллег воспользовался for in в десериализаторе. Бага была настолько плавающая, что победили мы ее только спустя полгода или больше, заменив на итерацию по индексам. Обжёгшись на молоке, на воду дуешь. Ну, я даже немного осекся от твоей уверенности и полез в доку по for..in и как бы не нашел прямого утверждения о итерации по возрастанию по индексам для массивов и векторов. С другой стороны там упомянут Object, для которого нет определенного порядка (particular order). Не следует ли из этого высказывания, что для других итерабельных объектов такой порядок присутствует? Добавлено через 14 минут Цитата:
Добавлено через 19 минут Вся сложность для меня была в том, чтобы развить дерево на такие поддеревья с одним стейтом. Мучался с двойным обходом, но сам обход сильно съедал производительность. Как-то раз пришла в голову шальная мысль, что если нет рута, то ходим и складываем трансформ относительно первой ноды, определяющей стейт и в конце концов мы найдем рут. Но а если есть рут, то относительно него. Получается некая двойная перезагрузка вертех буфера, но это ничто по сравнению с двойным обходом. Последний раз редактировалось dimarik; 02.03.2016 в 20:34. |
|
|||||
Цитата:
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
.
|
Двигло даже не в альфе. Могу демку залить, отражающую концепт. В скауте будет видна производительность. Но без сорцов не будет интересно. А сорцы никому не нужны, т.к. даже не в альфе. На самом деле в голове есть пара киллер фич, особенно для мобилок. Вот недавно в голову пришла идея как послойно рендерть item renderers в списках. Они обычно дают нехилую нагрузку в виде множественных drawcalls. Если рендереры похожи между собой и визуально не накладываются друг на друга, то логично их отрисовывать послойно каждый. В свое время, когда работал над мобильным проектом, я пытался изменить способ обхода в списке на by layer. Но оказалось, что построение такого обхода дороже самого рендеринга. Но вот теперь появилась идея как это можно сделать не изменяя стандартного deep-first обхода.
Но все это развивается медленно и печально, на правах хобби. |
|
|||||
Было бы очень любезно с твоей стороны рассказать как связаны e4x и ActionScript 3.0 Array и Vector.<T>. Цитата:
__________________
местонахождение |
|
|||||
Цитата:
Если бы там было написано, что для вектора и массива порядок обхода всегда гарантированно строгий, то не вопрос. А так, сделать что-то, где важен порядок на for each in, а потом искать гейзенбаги, как-то не камильфо. Цитата:
Цитата:
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Можно подробнее, в каком смысле не принимают помощь?
__________________
Дети не должны знать о своих родителях |
|
|||||
Цитата:
__________________
местонахождение |
|
|||||
Что-то тут уже теплое с мягким начали сравнивать. При использовании for each будет генерироваться одинаковый код, что для объекта, что для массива. А вот в каком порядке будут обходиться значения, зависит только от объекта (т.е. что hasnext2 (байткод) вернет, так и пойдем). В некоторых случаях и для обычного объекта можно добиться повторяемости обхода значений.
P.S. По поводу того, что for компилируется в while — это не совсем так, в байткоде нет ни того ни другого. Добавлено через 51 минуту P.P.S. Кстати, метод forEach массива и вектора, внутри использует for для обхода элементов.
__________________
משיח לא בא משיח גם לא מטלפן Последний раз редактировалось alatar; 07.03.2016 в 17:02. |
|
|||||
.
|
Ну так на чем остановились-то? Пользуем for [each] in для обхода Array и Vector.<T> или от греха подальше?
Я, по-старинке, всегда уточняю размер коллекции в константу или переменную и вперед. |
Часовой пояс GMT +4, время: 17:51. |
|
« Предыдущая тема | Следующая тема » |
|
|