如何解决在 Flutter 中计算排行榜排名
我正在 Flutter 中创建一个 2D 游戏,使用 firebase 作为后端服务。 我如何根据他们的分数计算用户的排名。目前,我通过使用索引来获得他们的排名,但是如果两个或更多用户的得分相同,那么我如何向他们显示相同的排名位置。 代码如下:
<body>
<div class="container">
<img src="https://img.icons8.com/pastel-glyph/2x/blood-sample.png" />
<img src="https://img.icons8.com/pastel-glyph/2x/blood-sample.png" />
<img src="https://img.icons8.com/pastel-glyph/2x/blood-sample.png" />
</div>
</body>
解决方法
这可能有效:只需计算得分较高的元素数量。我还添加了 _denseRank 函数,如果您想以这种方式显示它(例如,等级将变为 1、2、2、3、3 等)。这只是计算得分较高的唯一元素的数量 - toSet() 用于删除重复项 - 即获取唯一值。
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255,18,32,47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),debugShowCheckedModeBanner: false,home: Scaffold(
body: Center(
child: MyWidget(),),);
}
}
class MyWidget extends StatelessWidget {
final a=<int>[10,9,8,4,4];
int _rank(int index) => a.where( (element) => element>a[index]).length+1;
int _denseRank(int index) => a.where( (element) => element>a[index]).toSet().length+1;
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
for (var index=0; index<a.length;index++) Row(children: <Widget>[Text('Index $index'),Text('Rank ${_rank(index)}'),Text('Dense Rank ${_denseRank(index)}')])
]);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。