You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中Swift整数闭合范围(Closed Integer Range)的等效实现

Dart 中闭合整数范围的实现方案

一、官方第三方包的内置等效实现

Dart 标准库没有直接对应 Swift ClosedIntegerRange的类型,但官方维护的collection包提供了IntRange类,完全匹配你的需求:它实现了ClosedRange<int>接口,支持contains()方法校验值是否在范围内,同时可以通过start和end属性直接获取起止值。

使用步骤:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  collection: ^1.18.0
  1. 代码示例:
import 'package:collection/collection.dart';

void main() {
  // 模拟从JSON解析出的起止值
  final start = 1;
  final end = 5;
  final range = IntRange(start, end);
  
  print(range.contains(3)); // 输出 true
  print(range.contains(6)); // 输出 false
  print(range.start);       // 输出 1
  print(range.end);         // 输出 5
}

二、无依赖的高效自定义实现

如果不想引入外部包,自己实现一个轻量类是最高效的方案——无需额外内存开销,所有操作都是O(1)时间复杂度:

class ClosedIntRange {
  final int start;
  final int end;

  // 初始化时校验起止值的合理性
  ClosedIntRange(this.start, this.end) : assert(start <= end, "起始值不能大于结束值");

  // 校验值是否在闭合范围内
  bool contains(int value) => value >= start && value <= end;
}

// 使用示例
void main() {
  final start = 2;
  final end = 7;
  final range = ClosedIntRange(start, end);
  
  print(range.contains(4)); // 输出 true
  print(range.contains(8)); // 输出 false
  print(range.start);       // 输出 2
  print(range.end);         // 输出 7
}

三、借助集合实现的方案(不推荐)

虽然可以用List或Set模拟范围,但这种方式在范围较大时会创建大量元素,占用额外内存且性能低下,仅适合极小范围的临时场景:

// 不推荐的集合模拟方式
void main() {
  final start = 1;
  final end = 5;
  final rangeSet = Set<int>.from(List.generate(end - start + 1, (i) => start + i));
  
  print(rangeSet.contains(3)); // 输出 true
}

内容的提问来源于stack exchange,提问作者Awesomeplayer165

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:50:21