我们要$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在这种情况下是否有话要说。
答案 0 :(得分:3)
您可以先按position
和time
排序,然后按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 }
Array
Player
和position
与sortedWith
+ compareBy
time
进行排序
Player
' s position
结果是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)]
}