Как я могу преобразовать простой XMLList в Массив строк без цикла?

Вы должны установить клавишу UIViewControllerBasedStatusBarAppearance на true в info.plist

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
.
12
задан Eric Belair 26 February 2009 в 16:19
поделиться

6 ответов

Ваша текущая реализация более, чем достаточна. Единственная оптимизация, которую Вы могли сделать (хотя я не обеспокоюсь, если Вы не будете использовать Вектор. <>), должен передать в начальной способности в Конструктора Array:

var xmlLabels : XMLList = labels.label;
var labelsArray:Array /* of String */ = new Array(xmlLabels.length);

var index : int = 0;

for each (var labelText:String in xmlLabels)
{
    labelsArray[index++] = labelText;
}
2
ответ дан 2 December 2019 в 06:46
поделиться

for циклы чрезвычайно быстры в AS. Почему Вам было бы нужно это? Но Вы могли дать этому попытку:

private function toArray():void {
    var xml:XML = <labels>
               <label>all</label>
               <label>your</label>
              </labels>;

    var array:* = xml.label.text().toXMLString().split("\n") ;
    trace(array as Array);
}
1
ответ дан 2 December 2019 в 06:46
поделиться

Этот работает очень хорошо:

public static function xmlListToArray($x:XMLList):Array {           
    var a:Array=[], i:String;
    for (i in $x) a[i] = $x[i];
    return a;
}
4
ответ дан 2 December 2019 в 06:46
поделиться

Я чувствую, что где-то есть однострочный материал для этого ... ну, хорошо.

вопрос: почему .length здесь не работает? (всегда 0)

 public static function xmlListToArray($x:XMLList):Array {
        var t:int = $x.length;
        var a:Array=new Array(t), i:int;
        for (i = 0; i < t; ++i) a[i] = $x[i];
        return a;
    }
0
ответ дан 2 December 2019 в 06:46
поделиться

Несмотря на серьезное использование циклов for и логическую работу над объектом XML, это работа для XMLList.
Лучше всего это будет выглядеть примерно так:

var xml:XML = 
<labels>
    <label>All</label>
    <label>your</label>
    <label>base</label>
    <label>are</label>
    <label>belong</label>
    <label>to</label>
    <label>us.</label>
</labels>
;
var list:XMLList = xml.label;
var labels:XMLList = list.text(); //Optional
trace(list[0]);
trace(list[3]);
trace(list[6]);

Это выведет:

All
are
us.

Я сам подтвердил это во flash. Лично для меня имеет смысл использовать опциональную строку и ссылаться на labels[0] и т.д., но здесь это не нужно.

Я знаю, что вы просите массив строк в качестве вывода, но в основном я спрашиваю, почему вы не можете просто использовать аксессоры массива объекта XMLList.

Вот прекрасное руководство по этому вопросу: Senocular на E4X.

2
ответ дан 2 December 2019 в 06:46
поделиться

Это работает хорошо, но использует странный синтаксис XMLList. При желании последний оператор можно разместить в одной строке.

    var labels:XML = <labels>
                    <label>All</label>
                    <label>your</label>
                    <label>base</label>
                    <label>are</label>
                    <label>belong</label>
                    <label>to</label>
                    <label>us.</label>
                </labels>;

var labelsArray:Array /* of String */ = [];

labels.label.
(
              labelsArray.push(toString())
);  

Вызов toString () можно заменить вызовом attribute () для извлечения атрибутов.

14
ответ дан 2 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: