AS3:对两个字段进行排序

AS3: Sort Two Fields

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

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

我只想按时间(较少)和正确(高)对获胜者 Table 进行排序

所以获胜者是在更短的时间内做出更多正确答案的人。

我真的很努力得到这样的排序:

[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

但是没能实现

你的错误是排序了 2 次。第二次并没有对已排序的进行额外排序,只是对整个Array重新排序。您需要的是将 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;
}

在你的情况下,你必须编写一个服装分类器函数。为此请检查我的示例:

您的第一个数据:

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(滚动排序器);

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(滚动排序器);

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

@Organis 非常接近。

但我终于成功了:D 用这条线

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

我得到了我想要的结果 谢谢