Kotlin按范围内的值排序数组

时间:2017-08-27 10:07:54

标签: android algorithm sorting kotlin comparable

我们要$stmt = $db->prepare('INSERT INTO OnlineUser (Name, ProfilePicURL) VALUES (?, ?)'); $stmt->execute(array($u, $prof)); ,我们希望按class Player(val position: Int, val time: Float)players的数组或列表进行排序。如果其中一些position在首次排序后具有相同的players,我们希望按组position对它们进行排序。按组,我的意思是time具有相同位置的集合。

我知道

players

但当然它并没有解决这个问题。

Kotlin有什么聪明的方法来完成这个简单的任务吗?我们可以通过检查位置和交换项目来手动排序,但我想知道Kotlin在这种情况下是否有话要说。

1 个答案:

答案 0 :(得分:3)

您可以先按positiontime排序,然后按time分组,使用标准的Kotlin功能。

实施例

data class Player(val position: Int, val time: Float)

val p1 = Player(1, 10f)
val plys = arrayOf(p1, p1.copy(position = 3),
        p1.copy(time = 0f), p1.copy(time = 20f),
        p1.copy(position = 2), p1.copy(position = 2, time = 20f))

val groupBy = plys.sortedWith(compareBy(Player::position, Player::time))
                  .groupBy { it.position }

描述

  1. Array PlayerpositionsortedWith + compareBy
  2. time进行排序
  3. Player' s position
  4. 对其进行分组

    结果

    结果是Map<Int,List<Player>,在示例中如下所示:

        {
         1=[Player(position=1, time=0.0), Player(position=1, time=10.0), Player(position=1, time=20.0)], 
         2=[Player(position=2, time=10.0), Player(position=2, time=20.0)],
         3=[Player(position=3, time=10.0)]
        }