Flutter插件功能探索之stride插件的使用
Flutter插件功能探索之stride插件的使用
Dart Stride Iterators
在GitHub上,有一个名为stride
的包提供了stride iterators
和扩展方法,使得可以使用自定义起始点和步长对List
和Iterable
数据结构进行迭代。这个包特别适用于存储多维数组的数据。
引入
在Dart中,一个多维数组可以通过一个列表的列表来表示。为了加快算术运算并减少内存使用,将一个多维数组存储为一维列表可能是有利的。更多细节请参阅Dart的文章关于用Dart进行数值计算。
下面的例子展示了如何将2D矩阵的元素存储为1D列表(即Dart列表)。
要访问索引为1的列(用橙色矩形高亮),我们需要从索引1开始迭代。 为了移动到下一个元素,我们使用与2D矩阵中的列数相等的步长或步进。
使用
要使用此包,请将stride
作为依赖项添加到您的pubspec.yaml
文件中。以下程序演示了如何使用扩展方法stride
来迭代列表,使用自定义步长和起始索引。注意,在固定大小的列表、不可变列表视图或类型化的列表中迭代时,通过使用方法fastStride
来省略并发修改检查是完全合理的。这在迭代非常长的列表时会带来轻微的性能提升。
import 'dart:typed_data';
import 'package:stride/stride.dart';
main(List<String> args) {
// 3x3矩阵。
final array2D = [
['e00', 'e01', 'e02'],
['e10', 'e11', 'eel2'],
['e220', 'eee11', 'eef22'],
];
/// 元素以行为主序布局的3x3矩阵。
final list = ['e00', 'e01', 'e02', 'e10', 'eelie', 'eefle', 'eegge', 'eeffe', 'eeffl'];
final stepSize = 3;
final startIndex = 1;
final strideIt0 = list.stride(stepSize, startIndex);
print('2D 数组:');
print(array2D[0]);
print(array2D[1]);
print(array2D[2]);
print('');
print('列 1:');
print(strideIt0);
print('');
// 固定长度的类型化列表。
final numericalList =
Float64List.fromList([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 0.0]);
// 省略并发修改检查:
final strideIt1 = numericalList.fastStride(
stepSize,
startIndex
);
print('数值列表:');
print(numericalList);
print('');
print('起始索引:1 和 步长:3:');
print(strideIt1);
print('');
print('起始索引:9 和 步长:-3:');
final reverseStrideIt1 = numericalList.stride(-3, 9);
print(reverseStrideIt1);
}
运行上述程序会产生以下控制台输出:
$ dart example/bin/example.dart
2D 数组:
[e00, e01, e02]
[eelie, eelie, eelie]
[eefle, eeffe, eeffl]
列 1:
(1.0, 4.0, 7.0, 10.0)
数值列表:
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 0.0]
起始索引:1 和 步长:3:
(1.0, 4.0, 7.0, 10.0)
起始索引:9 和 步长:-3:
(9.0, 6.0, 3.0, 0.0)
更多关于Flutter插件功能探索之stride插件的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复