如何根据 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) =&gt; b.id.compareTo(a.id));。我不知道你评论的其余部分是什么意思。 1 次。我正在尝试将元素收集为我的类“Top”的属性......然后我需要根据“rank”属性按降序对这些元素组进行排序......然后我需要使用那些排序的元素/属性填充 ListBuilder。您提供的“打印”命令仅记录“顶部的实例”。如何检索已排序的元素并正确填充我的 ListBuilder 属性?谢谢你,很抱歉给你带来了困惑! 我仍然不明白“将元素作为属性收集”是什么意思。您可以覆盖toString 方法并返回一个自定义字符串供print(top)使用

以上是关于如何根据 Dart 中的 int 属性对所有 Class 属性进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

在 Dart 中的迭代器上创建 sum、min、max 属性

flutter_bloc 4.0.0如何获取事件属性参数。

对列表的多个子列表进行排序以创建新列表,Dart

如何从 dart 中的属性名称获取属性值(dart 中的 html 属性中的 _EVENTVALIDATION)?

对多个列表的子列表进行排序以创建新的列表,Dart。

如何从 json 中获取 int 并将其解析为 dart 中的 bool?