颤振/飞镖中的元组列表
Posted
技术标签:
【中文标题】颤振/飞镖中的元组列表【英文标题】:List of tuples in flutter/dart 【发布时间】:2021-01-24 16:24:39 【问题描述】:我想在 dart/flutter 中有一个元组列表,循环遍历它们并读取第一个和第二个变量。有一个 pub.dev package 在颤动中创建一个元组。 飞镖还有其他方法吗?我需要像flutter包那样使用类来创建元组吗?
我开始在dart pad创建例子
void main()
List testList = [("a",1),("b",2),("c",3),("d",4),("e",5)];
for (var i = 0; i < 5; i++)
print('hello $i');
currentItem = testList[i];
【问题讨论】:
您不能在 dartpad 中安装/使用 pub.dev 包。在您的本地 sdk 安装中试用它们。 问题更笼统地说,没有这个包是否可以做到。以及它在颤动中的样子。这不是 dartpad 的问题 @happy_san 我不明白为什么使用这个包是一个要求。正如您的链接问题所暗示的那样,List
有什么问题?
@Uwe.Schneider 你能谈谈我以前的 cmets 吗?
@ChristopherMoore List
是具有同质类型的元素的集合(如果元素不是同一类型,则最终将是 Object
)。元组是具有异构类型的元素的集合。如果只有两个元素,Map
可以替代。
【参考方案1】:
如果你想使用package:tuple
,你可以这样做:
void main()
var testList = <Tuple2<String, int>>[
Tuple2("a", 1),
Tuple2("b", 2),
Tuple2("c", 3),
Tuple2("d", 4),
Tuple2("e", 5),
];
for (var tuple in testList)
print('current tuple: ($tuple.item1, $tuple,item2)');
【讨论】:
【参考方案2】:如何使用Map
作为数据结构来迭代数据对的示例:
void main()
final testMap = "a": 1, "b": 2, "c": 3, "d": 4, "e": 5;
for (final mapEntry in testMap.entries)
final key = mapEntry.key;
final value = mapEntry.value;
print('Key: $key, Value: $value');
// Key: a, Value: 1
// Key: b, Value: 2
// Key: c, Value: 3
// Key: d, Value: 4
// Key: e, Value: 5
你也可以很容易地引入你自己的 Pair
类,它允许你将两个对象绑定在一起:
class Pair<T1, T2>
final T1 a;
final T2 b;
Pair(this.a, this.b);
void main()
final testList = [
Pair("a", 1),
Pair("b", 2),
Pair("c", 3),
Pair("d", 4),
Pair("e", 5)
];
for (final pair in testList)
print('$pair.a -> $pair.b');
// a -> 1
// b -> 2
// c -> 3
// d -> 4
// e -> 5
在大多数情况下,我会建议您针对您的特定需求创建 class
,因为这样可以更轻松地编写类型安全的代码。
【讨论】:
已经有MapEntry
,和上面的Pair
基本一样。
@wu-lee 是的,但是仅仅因为我们有一个具有类似行为的类,所以没有理由将它用于它不打算用于的目的(MapEntry
的文档说:“表示Map
中的条目的键/值对。”)。每次你想让一个方法返回两个值时,在你的代码周围使用MapEntry
会很奇怪。但应该注意的是,我已经在我的第一个示例中隐式使用了MapEntry
,因为这是我们从testMap.entries
得到的。但这也很有意义,因为我在这里使用Map
。以上是关于颤振/飞镖中的元组列表的主要内容,如果未能解决你的问题,请参考以下文章