我一直在研究 Dart,我想知道它是否有像 Kotlin 那样的范围运算符 https://kotlinlang.org/docs/reference/ranges.html 或类似的东西。
您可以使用List.generate,如下所示:
var list = List.generate(4, (i) => i);
print(list); // prints [0, 1, 2, 3]
或者
List _range(int from, int to) => List.generate(to - from + 1, (i) => i + from);
print(_range(3, 6)); // prints [3, 4, 5, 6]
目前 Dart 中没有这样的运算符。
在相当长的一段时间内(自 2014 年 9 月以来),
Iterable.generate(n)
已经可用,它可以迭代从 0
到 n-1
的整数。目前,这似乎是您可以使用类似 range()
的功能。
请参阅本期7775
中的讨论使用示例:
Iterable.generate(5).forEach((i) => print(i));
目前 Dart 中没有这样的运算符。
但是尝试这些代码
1.
List<int> range(int from, int from)=>List.generate(10,(i)=>i);
Iterable<int> range(int from,int to,[int stepSize=1]) sync*{
for(int i = from;i<to;i+=stepSize){
yield i;
}
}
Iterable<int> to(int end, [int stepSize = 1]) sync* {
if (this <= end) {
for (var i = this; i < end; i += stepSize) yield i;
} else {
for (var i = this; i > end; i -= stepSize) yield i;
}
}
}
for (int index in Iterable.generate(4)) {
// Loop body
}
您可以使用 range_type dart 包来使用范围。
import 'package:range_type/predefined_ranges.dart';
void main() {
final july = DateTimeRange.parse('[2022-07-01, 2022-08-01)');
final scheduleDate1 = DateTime(2022, 07, 02);
final scheduleDate2 = DateTime(2022, 08, 07);
final workingDays = DateTimeRange.parse('[2022-07-20, 2022-08-15)');
print('Is scheduleDate1 in July? ${july.containsElement(scheduleDate1)}');
print('Is scheduleDate2 in July? ${july.containsElement(scheduleDate2)}');
print('Is workingDays overlaps? ${july.overlap(workingDays)}');
print('workingDays intersection: ${july.intersection(workingDays)}');
print('workingDays union: ${july.union(workingDays)}');
print('july difference workingDays: ${july.difference(workingDays)}');
}