AS3:排序两个字段

时间:2018-03-12 20:03:51

标签: sorting actionscript-3

请需要帮助 这就是我正在做的事情:

var my_array_W:Array = new Array();
my_array_W.push({cor:Acorrect, tem:AnewTime, tab: "TB_A", nom:Aoseasnnombre});
my_array_W.push({cor:Bcorrect, tem:BnewTime, tab: "TB_B", nom:Boseasnnombre});
my_array_W.push({cor:Ccorrect, tem:CnewTime, tab: "TB_C", nom:Coseasnnombre}); 
my_array_W.push({cor:Dcorrect, tem:DnewTime, tab: "TB_D", nom:Doseasnnombre});
my_array_W.push({cor:Ecorrect, tem:EnewTime, tab: "TB_E", nom:Eoseasnnombre});
my_array_W.push({cor:Fcorrect, tem:FnewTime, tab: "TB_F", nom:Foseasnnombre});

此输出:

[tab] |  [cor]  |        [tem]
 TB_A      3          8.6877651541
 TB_B      4         12.9287651344
 TB_C      1       6199.334999999999923
 TB_D      4         33.6526718521
 TB_E      4         31.90468496844
 TB_F      1          6.334999999923

然后我排序:

my_array_W.sortOn("tem", Array.NUMERIC);
my_array_W.sortOn("cor", Array.NUMERIC | Array.DESCENDING);

获取此T_T:

[tab] |  [cor]  |        [tem]
 TB_E      4         31.90468496844
 TB_D      4         33.6526718521
 TB_B      4         12.9287651344
 TB_A      3          8.6877651541
 TB_F      1         31.90468496844
 TB_C      1       6199.334999999999923

我只想按时间(较少)和正确(较高)

对胜利者表进行排序

所以获胜者是能够在更短的时间内得到更正确答案的人。

我真的很努力地得到这样的一种:

[tab] |  [cor]  |        [tem]
 TB_B      4         12.9287651344
 TB_E      4         31.90468496844
 TB_D      4         33.6526718521
 TB_A      3          8.6877651541
 TB_F      1          6.334999999923
 TB_C      1       6199.334999999999923

但无法实现它

3 个答案:

答案 0 :(得分:1)

你的错误是你排序了2次。第二次没有对排序进行额外排序,它只是重新排序整个数组。您需要的是将 Array.sort(...) 方法与 compareFunction 参数一起使用:

my_array_W.sort(sortItems);

// Should return -1 if A < B, 0 if A == B, or 1 if A > B.
function sortItems(A:Object, B:Object):Number
{
    // First, the main criteria.
    if (A.cor > B.cor) return -1;
    if (A.cor < B.cor) return 1;

    // If A.cor == B.cor, then secondary criteria.
    if (A.tem < B.tem) return -1;
    if (A.tem > B.tem) return 1;

    // Items seem to be equal.
    return 0;
}

答案 1 :(得分:0)

@Organis如此接近。

但最后我做了诀窍:D 有了这条线

my_array_W.sortOn(['cor', 'tem'],[ Array.NUMERIC | Array.DESCENDING, Array.NUMERIC ]);

我得到了我正在寻找的结果 谢谢

答案 2 :(得分:-1)

在你的情况下,你必须写一个服装分拣机功能。这样做检查我的例子:

您的第一个数据:

var arr:Array = [];
arr.push({cor:4,tem:13});
arr.push({cor:3,tem:12});
arr.push({cor:2,tem:1});
arr.push({cor:3,tem:16});
arr.push({cor:1,tem:11});

基于tem的样本的排序功能和排序结果:     arr.sort(scrollSorter);

function temSorter(a,b):int
{
    if(a.tem<b.tem)
        return 1 ;//To pass a forward
    else(a.tem>b.tem)
        return -1;//To pass a backward
    return 0;//a and b are same. 
}

结果是:

  The result is this:
    [
     {
      "cor": 3,
      "tem": 16
     },
     {
      "cor": 4,
      "tem": 13
     },
     {
      "cor": 3,
      "tem": 12
     },
     {
      "cor": 1,
      "tem": 11
     },
     {
      "cor": 2,
      "tem": 1
     }
    ]

现在,基于您需要的东西的样本: arr.sort(scrollSorter);

function userScoreCalculator(a):Number
        {
            return a.cor/a.tem;
        }


function winnerSorter(a,b):int
{


    var aScore:Number = userScoreCalculator(a);
    var bScore:Number = userScoreCalculator(b);
    if(aScore<bScore)
        return 1 ;
    else(aScore>bScore)
        return -1
    return 0
}

结果是:

[
 {
  "cor": 2,
  "tem": 1
 },
 {
  "cor": 4,
  "tem": 13
 },
 {
  "cor": 3,
  "tem": 12
 },
 {
  "cor": 3,
  "tem": 16
 },
 {
  "cor": 1,
  "tem": 11
 }
]

并不意味着得分为2的人是胜利者,因为他只用了1秒。但其他玩家接近收集tem参数,因此下一个获胜者是得分最高的人。它来自userScoreCalculator()输出。该功能的较高输出是赢家。

现在花点时间更改userScoreCalculator()函数以显示获胜者。

https://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fa4.html