Flutter多项随机选择插件multiple_random_choice的使用

Flutter多项随机选择插件multiple_random_choice的使用

multiple_random_choice 是一个用于生成多个随机选择的函数库。它可以等概率或带权重地从选项中进行随机选择。

特性

  • 在等概率条件下从选项中生成多个随机选择。
  • 带权重地从选项中生成多个随机选择。

使用/示例

import 'package:multiple_random_choice/multiple_random_choice.dart';

// 带权重的多个随机选择
final m = {
  'A': 1.0,
  'B': 2.0,
  'C': 10.0,
  'D': 20,
  'E': 1,
};
final s = randomMultipleWeightedChoice<String>(m, 3, null);
print(s);
// ex. {C, D, B}

// 等概率的多个随机选择
final ss = randomMultipleChoice<String>(['A', 'B', 'C', 'D', 'E'], 2, null);
print(ss);
// ex. {C, D}

你可以在 example 文件夹中查看更多示例。

完整示例Demo

以下是一个完整的示例代码,展示了如何使用 multiple_random_choice 插件进行带权重和等概率的随机选择:

// ignore_for_file: avoid_print

import 'dart:collection';
import 'dart:math';

import 'package:multiple_random_choice/multiple_random_choice.dart';

void main() {
  // 带权重的多个随机选择
  // 选项-权重映射
  final m = {
    'A': 1.0,
    'B': 2.0,
    'C': 10.0,
    'D': 20,
    'E': 1,
  };
  final countMap = <String, int>{};
  for (int i = 0; i < 10000; i++) {
    final s = randomMultipleWeightedChoice<String>(m, 3, null);
    final sts = SplayTreeSet.of(s);
    final skey = sts.join();
    if (countMap.containsKey(skey)) {
      countMap[skey] = countMap[skey]! + 1;
    } else {
      countMap[skey] = 1;
    }
  }
  final le = countMap.entries.toList();
  le.sort((a, b) => -1 * a.value.compareTo(b.value));
  print(LinkedHashMap.fromEntries(le));
  // ex. {BCD: 4734, CDE: 2334, ACD: 2280, BDE: 223, ABD: 219, ADE: 87, BCE: 53, ABC: 45, ACE: 24, ABE: 1}

  // 等概率的多个随机选择
  final ss = randomMultipleChoice<String>(['A', 'B', 'C', 'D', 'E'], 2, null);
  print(ss);
  // ex. {C, D}

  // 等概率的多个随机选择(指定Random对象)
  final ssr = randomMultipleChoice<String>(['A', 'B', 'C', 'D', 'E'], 2, Random());
  print(ssr);
  // ex. {B, E}
}

更多关于Flutter多项随机选择插件multiple_random_choice的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter多项随机选择插件multiple_random_choice的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用multiple_random_choice插件的一个简单示例。这个插件允许你在列表中进行多项随机选择。首先,你需要确保已经添加了该插件到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  multiple_random_choice: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装插件。

接下来是一个使用multiple_random_choice插件的示例代码:

import 'package:flutter/material.dart';
import 'package:multiple_random_choice/multiple_random_choice.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Multiple Random Choice Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> items = List.generate(20, (index) => 'Item $index');
  List<String> selectedItems = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Multiple Random Choice Example'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: () async {
              // 配置多项随机选择的参数
              final RandomChoiceConfig config = RandomChoiceConfig(
                totalItems: items.length,
                selectCount: 5, // 选择5个随机项
              );

              // 执行随机选择
              final List<int> selectedIndices = await MultipleRandomChoice.choose(config);

              // 根据选中的索引获取对应的项
              setState(() {
                selectedItems = selectedIndices.map((index) => items[index]).toList();
              });
            },
            child: Text('Random Select 5 Items'),
          ),
          SizedBox(height: 20),
          if (selectedItems.isNotEmpty)
            Text(
              'Selected Items: ${selectedItems.join(', ')}',
              style: TextStyle(fontSize: 20),
            ),
        ],
      ),
    );
  }
}

解释

  1. 依赖导入:在pubspec.yaml中添加multiple_random_choice依赖。
  2. 创建主应用MyApp是应用的主入口,它包含一个MaterialApp
  3. 主页面MyHomePage是一个有状态的页面,它包含了一个按钮和显示选中项的文本。
  4. 按钮点击事件:当按钮被点击时,使用MultipleRandomChoice.choose方法进行多项随机选择。
  5. 配置参数RandomChoiceConfig对象用于配置随机选择的参数,比如总项数和选择数量。
  6. 更新UI:根据选中的索引更新selectedItems列表,并在UI中显示。

这个示例展示了如何使用multiple_random_choice插件在Flutter应用中实现多项随机选择功能。你可以根据实际需求调整选择数量和列表项。

回到顶部