1

配列のスライス メソッドと同様に、xmllist からアイテムの範囲を取得するにはどうすればよいですか?

スライス (開始インデックス、終了インデックス);

私はこのようなことを試みています:

            var tempXMLList:XMLList = new XMLList();

            for( var i:int = startIndex; i <= endIndex; i++){
                tempXMLList += originalList[i];
            }

しかし、originalList[i] を変換できないというエラーが表示されます

- - アップデート - -

Timofei の関数を使用したところ、完全に機能しました。

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
    return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}

ただし、既にフィルター処理された xmllist を使用すると、壊れます。

filteredData = filteredData.(team == "Ari");

trace("filteredData.length(): " + filteredData.length().toString());
pData = SliceXMLList(filteredData, startIndex, endIndex);
trace("start: " + startIndex.toString() + " end: " + endIndex.toString());
trace("pdata length: " + pData.length().toString());

出力

filteredData.length(): 55
start: 0 end: 55
pdata length: 5
4

2 に答える 2

4

e4x を使用します。

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
    return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}

アップデート:

e4x ソートの後にこの関数を使用する場合、childIndex() 関数はノードのインデックスの古い値を返し、変更できないため、問題があります。だから、私は別のアイデアがあります:

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
    for (var i : int = 0; i < xmllist.length(); i++)
        xmllist[i].@realIndex = i;
    xmllist =  xmllist.(@realIndex >= startIndex && @realIndex <= endIndex);
    for (i = 0; i < xmllist.length(); i++)
        delete xmllist[i].@realIndex;
    return xmllist;
}

あるいは単に

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
    var newXMLList : XMLList = new XMLList();
    var currIndex : int = 0;
    for (var i : int = startIndex; i <= endIndex; i++)
        newXMLList[currIndex++] = xmllist[i];
    return newXMLList;
}

これは最高のバリアントだと思います。もちろん、1 行の e4x ステートメントははるかにエレガントですが、残念ながら再利用できません。

于 2011-02-02T22:22:42.220 に答える
0

どのように動作するかはわかりませんが、すべての子を繰り返し処理し、それぞれを配列に保存してから、そのようにトリミングすることができます

于 2011-02-02T22:05:29.370 に答える