如何根据 Dart 中的 int 属性对所有 Class 属性进行排序?
Posted
技术标签:
【中文标题】如何根据 Dart 中的 int 属性对所有 Class 属性进行排序?【英文标题】:How to sort all Class properties based on int property in Dart? 【发布时间】:2018-05-30 19:17:44 【问题描述】:我收到了包含 int 属性值的 Firebase 信息。我已经成功地将它们存储为一个类。现在我想将该类设为地图或列表,然后根据我的 int 值对它们进行降序排序,并创建每个属性的列表以稍后填充元素。这是我的代码...
class Top
String videoId;
int rank;
String title;
String imageString;
Top(this.videoId, this.rank, this.title, this.imageString);
List<Top> videos = new List();
List onesRank = new List();
List onesIds = new List();
for (var items in titles)
var top = new Top(videoId: items['vidId'], rank: items['Value'],
title: items['vidTitle'], imageString: items['vidImage']);
onesRank.add(top.rank);
onesIds.add(top.videoId);
print(onesRank);
print(onesIds);
打印 print(top.rank)
成功记录我的 int 值,print(onesIds)
正确记录我的 id,就像这样......
[10, 6, 14, 12, 11, 5, 10, 1]
[4408NthSJis, 7n5ieHnu90w, XuSYtAsMxfY, 9bZkp7q19f0, sGRv8ZBLuW0, 2ips2mM7Zqw, 0Pinupmqwaw, m8MfJg68oCs]
但我想将所有 top
属性按元素降序排列为 top.rank 像这样...
[14, 12, 11, 10, 10, 6, 5, 1]
[XuSYtAsMxfY,9bZkp7q19f0,sGRv8ZBLuW0,4408NthSJis,0Pinupmqwaw,7n5ieHnu90w,
2ips2mM7Zqw,m8MfJg68oCs]
我是这样在 Swift 中完成的...
for items in snapshot.value as! NSDictionary
let ids = items.value["vidId"] as! String
let value = items.value["Value"] as! Int
let pics = items.value["vidImage"] as! NSString
let title = items.value["vidTitle"] as! String
let top = Top(videoID: ids, value: value, title: title, imageString: pics as String)
videos.append(top)
videos.sort $0.value > $1.value
self.topTitle = videos.map $0.title
self.topID = videos.map $0.videoID
self.topImage = videos.map $0.imageString
self.vidRank = videos.map $0.value
【问题讨论】:
“只回馈”是什么意思? 打印出来的就是这些 您能否添加示例数据以及您想要的结果是什么样的? @GünterZöchbauer 我已经添加了我想要完成的内容的解释,如果你熟悉 Swift,我是如何让它在那里工作的。仅供参考...videos
像这样被实例化...var videos = [Top]()
@SethLadd“只回馈”意味着我的日志打印出来...[Instance of 'Top', Instance of 'Top', Instance of 'Top', Instance of 'Top', Instance of 'Top', Instance of 'Top', Instance of 'Top', Instance of 'Top']
【参考方案1】:
我还是不太明白你想完成什么。
如果你有Top
的列表,你可以这样做
List<Top> videos = new List();
// fill list
videos..sort((a, b) => a.id.compareTo(b.id));
print(videos);
【讨论】:
我想就是这样。我现在如何反转已排序的 List 并返回到 Top 的实例并使用已排序的属性? 要颠倒顺序使用(a, b) => b.id.compareTo(a.id));
。我不知道你评论的其余部分是什么意思。
1 次。我正在尝试将元素收集为我的类“Top”的属性......然后我需要根据“rank”属性按降序对这些元素组进行排序......然后我需要使用那些排序的元素/属性填充 ListBuilder。您提供的“打印”命令仅记录“顶部的实例”。如何检索已排序的元素并正确填充我的 ListBuilder 属性?谢谢你,很抱歉给你带来了困惑!
我仍然不明白“将元素作为属性收集”是什么意思。您可以覆盖toString
方法并返回一个自定义字符串供print(top)
使用以上是关于如何根据 Dart 中的 int 属性对所有 Class 属性进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
在 Dart 中的迭代器上创建 sum、min、max 属性