Flutter集合采样插件dart_collection_sampler的使用

Flutter集合采样插件dart_collection_sampler的使用

dart_collection_sampler 是一个小巧的库,实现了从集合中采样的方法。以下是该库的基本用法和一些示例代码。

特性与徽标

  • Pub Package: Pub Package
  • Dart: Dart
  • Codecov: Codecov
  • Contributor Covenant: Contributor Covenant

使用

以下是一个简单的使用示例:

void deal(int n, List<String> items, {required bool unique}) {
  // 输出选择的信息
  stdout.writeln("Picking $n from $items (unique: $unique)\n");

  // 如果只选择一个元素
  if (n == 1) {
    stdout.writeln("Selected item: ${CollectionSampler().pick(items)}");
  } else {
    // 否则选择多个元素
    stdout.writeln(
      "Selected items: ${CollectionSampler().pickN(items, n, unique: unique)}",
    );
  }
}

示例代码

下面是完整的示例代码,展示了如何使用 dart_collection_sampler 库进行集合采样。

import 'dart:io';

import 'package:args/args.dart';
import 'package:dart_collection_sampler/dart_collection_sampler.dart';

void main(List<String> arguments) {
  final argParser = ArgParser()
    ..addOption(
      "num",
      abbr: "n",
      help: "items to pick from rest of command line",
      defaultsTo: "1",
    )
    ..addFlag(
      "unique",
      abbr: "u",
      help: "select unique results",
      negatable: false,
    );

  final results = argParser.parse(arguments);

  exit(
    deal(
      int.parse(results["num"] as String),
      results.rest,
      unique: results['unique'] as bool,
    ),
  );
}

// 处理逻辑
int deal(int n, List<String> items, {required bool unique}) {
  // 检查输入是否为空
  if (items.isEmpty) {
    stderr.writeln("你必须提供一个或多个输入项");
    return 1;
  }

  // 输出选择的信息
  stdout.writeln("Picking $n from $items (unique: $unique)\n");

  // 如果只选择一个元素
  if (n == 1) {
    stdout.writeln("Selected item: ${CollectionSampler().pick(items)}");
  } else {
    // 否则选择多个元素
    stdout.writeln(
      "Selected items: ${CollectionSampler().pickN(items, n, unique: unique)}",
    );
  }
  return 0;
}

代码说明

  1. 导入必要的包

    import 'dart:io';
    import 'package:args/args.dart';
    import 'package:dart_collection_sampler/dart_collection_sampler.dart';
    
  2. 解析命令行参数

    final argParser = ArgParser()
      ..addOption(
        "num",
        abbr: "n",
        help: "items to pick from rest of command line",
        defaultsTo: "1",
      )
      ..addFlag(
        "unique",
        abbr: "u",
        help: "select unique results",
        negatable: false,
      );
    
  3. 处理输入参数

    final results = argParser.parse(arguments);
    
  4. 调用 deal 函数并退出程序

    exit(
      deal(
        int.parse(results["num"] as String),
        results.rest,
        unique: results['unique'] as bool,
      ),
    );
    
  5. 定义 deal 函数

    int deal(int n, List<String> items, {required bool unique}) {
      if (items.isEmpty) {
        stderr.writeln("你必须提供一个或多个输入项");
        return 1;
      }
      stdout.writeln("Picking $n from $items (unique: $unique)\n");
    
      if (n == 1) {
        stdout.writeln("Selected item: ${CollectionSampler().pick(items)}");
      } else {
        stdout.writeln(
          "Selected items: ${CollectionSampler().pickN(items, n, unique: unique)}",
        );
      }
      return 0;
    }
    

更多关于Flutter集合采样插件dart_collection_sampler的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集合采样插件dart_collection_sampler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_collection_sampler 是一个用于在 Flutter 中进行集合采样的 Dart 插件。它可以帮助你从一个集合中随机抽取指定数量的元素。这个插件特别适用于需要从大型数据集中随机选取样本的场景。

安装

首先,你需要在 pubspec.yaml 文件中添加 dart_collection_sampler 依赖:

dependencies:
  dart_collection_sampler: ^1.0.0

然后运行 flutter pub get 来安装依赖。

基本用法

1. 从列表中随机抽取样本

你可以使用 sample 函数从一个列表中随机抽取指定数量的元素。

import 'package:dart_collection_sampler/dart_collection_sampler.dart';

void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  
  // 从列表中随机抽取 3 个元素
  List<int> sampledNumbers = sample(numbers, 3);
  
  print(sampledNumbers); // 输出可能是 [2, 5, 9] 或其他随机组合
}

2. 从 Set 中随机抽取样本

dart_collection_sampler 也支持从 Set 中随机抽取样本。

import 'package:dart_collection_sampler/dart_collection_sampler.dart';

void main() {
  Set<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  
  // 从 Set 中随机抽取 3 个元素
  Set<int> sampledNumbers = sample(numbers, 3);
  
  print(sampledNumbers); // 输出可能是 {3, 7, 10} 或其他随机组合
}

3. 处理空集合

如果你尝试从一个空集合中抽取样本,sample 函数会返回一个空列表或空集合。

import 'package:dart_collection_sampler/dart_collection_sampler.dart';

void main() {
  List<int> emptyList = [];
  
  // 从空列表中随机抽取 3 个元素
  List<int> sampledNumbers = sample(emptyList, 3);
  
  print(sampledNumbers); // 输出 []
}

4. 处理样本数量大于集合大小的情况

如果你指定的样本数量大于集合的大小,sample 函数会返回整个集合。

import 'package:dart_collection_sampler/dart_collection_sampler.dart';

void main() {
  List<int> numbers = [1, 2, 3];
  
  // 从列表中随机抽取 5 个元素
  List<int> sampledNumbers = sample(numbers, 5);
  
  print(sampledNumbers); // 输出 [1, 2, 3]
}

高级用法

1. 使用自定义随机数生成器

如果你需要控制随机性,可以传入一个自定义的随机数生成器。

import 'package:dart_collection_sampler/dart_collection_sampler.dart';
import 'dart:math';

void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  Random random = Random(42); // 使用固定的种子以确保可重复性
  
  // 使用自定义随机数生成器从列表中随机抽取 3 个元素
  List<int> sampledNumbers = sample(numbers, 3, random: random);
  
  print(sampledNumbers); // 输出可能是 [3, 7, 10] 或其他基于随机种子的组合
}

2. 从 Map 中随机抽取样本

虽然 sample 函数默认不支持 Map,但你可以通过提取 Map 的键或值来进行采样。

import 'package:dart_collection_sampler/dart_collection_sampler.dart';

void main() {
  Map<int, String> map = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five'};
  
  // 从 Map 的键中随机抽取 3 个键
  List<int> sampledKeys = sample(map.keys.toList(), 3);
  
  print(sampledKeys); // 输出可能是 [2, 4, 5] 或其他随机组合
}
回到顶部