按两个单独的列对2d数组进行排序

时间:2014-05-11 15:11:54

标签: java arrays sorting arraylist

现在我有一个方法可以从2D数组中获取数据,将其抛入Arraylist然后让我只从该Arraylist中检索我想要的特定部分。

下面的代码循环遍历races Arraylist并将参赛者,他们参与的总次数和事件数放入一个数组中,但无论如何都是无序的。

if (!Found && selected.equals(race.GetCat()))
{
    ranking[j][0] = race.GetComp();
    ranking[j][1] = race.GetCat();
    ranking[j][2] = (GetSecs(race.GetRace1())) 
            + (GetSecs(race.GetRace2())) 
            + (GetSecs(race.GetRace3())) + "";

    n++; 
};
Found= false;

for (int i = 0; i < locations.size(); i++)
{
    for (Race race: races)
    {
        if (race.GetComp().equals(array[i][0]) && option.equals(array[i][1]))
        {
            seconds += (GetSes(race.GetRace1()))
                    + (GetSes(race.GetRace2()))
                    + (GetSes(race.GetRace3()));
            total= GetMin(seconds);
            counter++;
        }
        ranking[i][2] = total2 + "";
        ranking[i][3] = counter + "";
    }
}

所以排名打印出像

RACER      TOTAL TIME     EVENTS TAKING PART IN
name          230.44          2
name          142.51          4
name          523.01          7
name          444.55          2
name          432.18          4

并排序排名(String)数组,以便通过事件的数量或比赛的总时间进行排序并不会太困难。

但是,不止一个赛车手会参加相同数量的赛事,所以我想知道为了根据赛事数量订购阵列需要经过哪些流程或代码,然后检查看看哪些排名分享了事件的数量,然后根据总时间最低来切换它们

所以排名分类如

george   500    5
john     400    5
george   500    4
david    300    3
carl     200    3

的排序方式如

john     400    5
george   500    5
george   500    4
carl     200    3
david    300    3

如果有可能的话。我可以将它们放入一个数组中,甚至可以按一个特定的列对它们进行排序,但是如果第一列有数字那么将它们排序为一个,然后按另一个进行排序是完全相同的,如果任何这个帖子都有意义的话。

1 个答案:

答案 0 :(得分:0)

退房:

  1. Column Comparator。它允许您对ArrayList中的任何列进行排序。
  2. Group Comparator。它允许您同时对多个列进行排序。