【问题标题】:actionscript 3.0 sort datagrid on multiple conditionsactionscript 3.0 在多个条件下对数据网格进行排序
【发布时间】:2018-03-26 09:21:24
【问题描述】:

我有一个数据网格,其中包含一些比赛后的排名。我希望先对数据网格进行排序,然后是目标差异。为每个团队 (1-12) 设置不同的变量,以 XML 格式从多个游戏表中收集数据。

如何先按“WIN”排序,而不是按“GD”排序?

感谢大家的帮助!

function Standings(){
var myDP5: DataProvider = new DataProvider();
        for (var k: int = 1; k < 13 ; k++) { 
            var TEAM_0 =this['TEAM_'+ k];
            var TEAM_0_GF: Array = this['TEAM_' + k+"_GF"];
            var TEAM_0_GP: int = this['TEAM_' + k+"_GP"];
            var TEAM_0_GA: int = this['TEAM_' + k+"_GA"];
            var TEAM_0_win: int = this['TEAM_' + k+"_win"];
            var TEAM_0_loss: int = this['TEAM_' + k+"_loss"];
            var TEAM_0_GD:int =TEAM_0_GF.length -TEAM_0_GA;
            myDP5.addItem({
                "TEAM": TEAM_0,
                "GP": TEAM_0_GP,
                "WIN": TEAM_0_win,
                "LOSS": TEAM_0_loss,
                "GF": TEAM_0_GF.length,
                "GA": TEAM_0_GA,
                "GD": TEAM_0_GD


            });

        }

        standings_grid = new DataGrid();
        standings_grid.addEventListener(Event.CHANGE, velgeKamp);
        standings_grid.columns = ["TEAM", "GP", "WIN","LOSS","GF","GA","GD"];
        standings_grid.dataProvider = myDP5;
        standings_grid.rowCount = 20;
        standings_grid.move(50, 50);
        standings_grid.width = 500;
        standings_grid.columns[0].width = 120;
        standings_grid.columns[1].width = 70;
        standings_grid.columns[2].width = 50;
        standings_grid.columns[3].width = 50;
        standings_grid.columns[4].width = 50;
        standings_grid.columns[5].width = 50;
        standings_grid.columns[6].width = 50;

        standings_grid.width = 440;
        standings_grid.resizableColumns = false;
        standings_grid.sortOn("WIN",Array.DESCENDING);
        //standings_grid.sortItemsOn("LOSS", Array.NUMERIC);
        //oversikt_gridd.height = 500;
        standings_grid.sortableColumns = true;
        addChild(standings_grid);
}

【问题讨论】:

    标签: xml actionscript-3 datagrid


    【解决方案1】:

    很简单。您应该为您的项目创建一个 Array,然后使用 compareFunction 参数对其进行 .sort(...)

    var aList:Array = new Array;
    
    for (var k: int = 1; k < 13 ; k++)
    { 
        var TEAM_0 = this['TEAM_'+ k];
        var TEAM_0_GF: Array = this['TEAM_' + k + "_GF"];
        var TEAM_0_GP:   int = this['TEAM_' + k + "_GP"];
        var TEAM_0_GA:   int = this['TEAM_' + k + "_GA"];
        var TEAM_0_win:  int = this['TEAM_' + k + "_win"];
        var TEAM_0_loss: int = this['TEAM_' + k + "_loss"];
        var TEAM_0_GD:int = TEAM_0_GF.length - TEAM_0_GA;
    
        var anEntry:Object =
        {
            "TEAM": TEAM_0,
            "GP": TEAM_0_GP,
            "WIN": TEAM_0_win,
            "LOSS": TEAM_0_loss,
            "GF": TEAM_0_GF.length,
            "GA": TEAM_0_GA,
            "GD": TEAM_0_GD
        };
    
        aList.push(anEntry);
    }
    
    aList.sort(compareEntries);
    
    // -1 to sort A before B
    // 0 to not sort A and B
    // 1 to sort A after B
    function compareEntries(A:Object, B:Object):Number
    {
        // I don't know what exactly you need
        // but I believe you'll figure it out.
    
        if (A['WIN'] > B['WIN']) return -1;
        if (A['WIN'] < B['WIN']) return 1;
    
        // Now if A['WIN'] == B['WIN'].
    
        if (A['GD'] > B['GD']) return -1;
        if (A['GD'] < B['GD']) return 1;
    
        return 0;
    }
    
    // Now pass the sorted items to the DataProvider.
    var myDP5:DataProvider = new DataProvider;
    while (aList.length) myDP5.addItem(aList.shift());
    

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 2012-02-11
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多