在 Flutter/Dart 中映射多个列表?
Posted
技术标签:
【中文标题】在 Flutter/Dart 中映射多个列表?【英文标题】:Mapping Multiple Lists in Flutter/Dart? 【发布时间】:2018-04-01 02:06:22 【问题描述】:我有 SWIFT 代码,其中我映射了一组具有相同数量元素的列表,其中 1 是一个整数列表,它们按降序映射。这是我的 SWIFT 代码...
class Video
let videoID: String
let rank: Int
let title: String
let imageString: String
init(videoID: String, rank: Int, title: String, imageString: String)
self.videoID = videoID
self.rank = rank
self.title = title
self.imageString = imageString
var videos = [Video]()
videos.sort $0.rank < $1.rank
self.vidTitleArray = videos.map $0.title
self.vidRankArray = videos.map $0.rank
self.vidIdArray = videos.map $0.videoID
self.vidImageArray = videos.map $0.imageString
这是我在 Flutter 中的位置,但我在前进时遇到了错误......
class videos
String videoId;
int rank;
String title;
String imageString;
videos(this.videoId, this.rank, this.title, this.imageString);
如何从类构造函数中创建一个list
,然后按降序重新排列映射到排名的所有元素?
***** 选项 *****
这是我的代码,没有使用 Video
类。我使用SplayTreeMap
对其进行了正确排名,但如果Value
始终相同,它只会带回1 个节点。有没有办法以Value
降序映射所有 4 个地图?
映射 myMap = event.data.snapshot.value; //存储每张地图
var titles = myMap.values;
List onesTitles = new List();
List onesIds = new List();
List onesImages = new List();
List onesRank = new List();
for (var items in titles)
onesTitles.add(items['vidTitle']);
onesIds.add(items['vidId']);
onesImages.add(items['vidImage']);
onesRank.add(items['Value']);
names = onesTitles;
ids = onesIds;
numbers = onesRank;
vidImages = onesImages;
【问题讨论】:
我已经编辑了答案,以便更清楚地了解如何使用 List.sort()。 【参考方案1】:您可以为此目的使用List.sort()
,我创建了一个自定义示例,我在其中硬编码了Videos
类的3 个实例,然后将它们以List
的升序添加到我的构建方法中。使用List.sort()
和compareTo
,我能够按降序重新排列它们。
List<Videos> myList = [_firstVideos, _secondVideos, _thirdVideos];
sort()
for (var video in myList)
print(video.rank); ///prints 1 2 3
myList.sort((y, x) => x.rank.compareTo(y.rank));
for (var video in myList)
print(video.rank); ///prints 3 2 1
...
import 'package:flutter/material.dart';
void main()
runApp(new MaterialApp(home: new MyApp(),));
class MyApp extends StatelessWidget
Videos _firstVideos = new Videos(
videoId: "0001",
rank: 1,
title: "My First Video",
imageString: "My First Image",
);
Videos _secondVideos = new Videos(
videoId: "0002",
rank: 2,
title: "My Seocnd Video",
imageString: "My Second Image",
);
Videos _thirdVideos = new Videos(
videoId: "0003",
rank: 3,
title: "My Third Video",
imageString: "My Third Image",
);
@override
Widget build(BuildContext context)
List<Videos> myList = [_firstVideos,_secondVideos,_thirdVideos];
sort()
myList.sort((y,x)=>x.rank.compareTo(y.rank));
print(myList[0].title);
return new Scaffold(
body: new Center(
child: new FlatButton(onPressed: sort, child: new Text("Sort")),
),
);
class Videos
String videoId;
int rank;
String title;
String imageString;
Videos(this.videoId, this.rank, this.title, this.imageString);
【讨论】:
@azia 请查看我添加的其他OPTION
。我正在尝试在不构建 Video
列表的情况下进行排序以上是关于在 Flutter/Dart 中映射多个列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Dart / flutter中映射和显示嵌套的JSON?
(Flutter/Dart) 如何修复使用 [ ] 显示列表中的数字