我正在用 PHP 编写一个小算法,它遍历n部带有评级的电影,并将存储前 5 部。我不是从数据文件中读取,而是从流中读取,所以我不能简单地按评级对电影进行排序。
我的问题是,当我阅读流媒体时,跟踪排名前 5 的电影的最有效方法是什么?目前我执行以下操作:
- 读入 5 部电影(进入名为 movies[] 的数组),带有两个键 movies[][name] 和 movies[][rating]
- 使用 array_multisort() 按 movies[rating] 排序数组(最高评分现在位于 movies[4])
- 在下一部电影中阅读
- 如果这个新电影评分 > movies[0][rating] 则用这个新电影替换 movies[0]
- 重新排序列表
- 重复 3-5 直到完成
我的方法有效,但每次阅读后都需要对列表进行排序。我相信这是一种昂贵的方法,主要是因为每次我使用 array_multisort() 时,我都必须对 5 部电影进行 for 循环,以构建要排序的索引。谁能提出一个更好的方法来解决这个问题?