在Swift中,如果有列表,您可以像这样迭代它
for (index, val) in itemList {
//do stuff
}
我正在尝试在Dart中重新创建相同的功能,但这是我想出的最好的-
extension ListExtensions<T> on List<T> {
List<List<dynamic>> enumerated (){
List<List<dynamic>> result = List(this.length);
for(int i = 0; i < this.length; i++)
result[i] = [i, this[i]];
return result;
}
}
这是当前方式的示例用法
var list = ["hello", "world", "this", "is", "an", "example"];
for( var pair in list.enumerated()){
print('${pair[0]}: ${pair[1]}');
}
答案 0 :(得分:2)
您可以使用:
for (var entry in list.asMap().entries) {
print("index: ${entry.key}, value: ${entry.value}");
}
如果您想编写更直接的内容,您的方法很好。我将为索引和值使用一个类,以便可以正确键入。也许:
class IndexedValue<T> {
final int index;
final T value;
Pair(this.index, this.value);
}
extension EnumerateExt<T> on List<T> {
Iterable<IndexedValue<T>> get enumerated sync {
var i = 0;
for (var value in this) yield IndexedValue(i++, value);
}
}
然后您可以按以下方式遍历索引:
for (var iv in list.enumerated) {
print("index: ${iv.index}, value: ${iv.value}");
}
答案 1 :(得分:1)
我们可以使用List
for-in
直接遍历loop
:
void main() {
List<String> testCases = ['Hello','World','this','is','an','examples'];
for(var testCase in testCases){
print('$testCase, ${testCases.indexOf(testCase)}');
}
}
输出:
Hello, 0
World, 1
this, 2
is, 3
an, 4
example, 5
注意: indexOf
返回此列表中[element]的第一个索引。因此重复的元素将不会显示正确的索引。
为此,基于索引的for
loop
将起作用:
for(int index=0; index<testCases.length; index++){
print('${testCases[index]}, $index');
}
还有asMap()
,它返回Map
的{{1}}形式。 asMap() Doc