生成列表飞镖中不存在的随机数数组

时间:2019-09-18 10:35:32

标签: random flutter dart

所以我有一个预定义的数字列表,其中每个数字都由6个数字组成,例如{1,2,3,4,5,6; 34,52,3,76,12,4; 53,1,4,76,23,5; ....}

数字组中的每个数字都在1到99之间,

import 'dart:math';

main() {
  var rng = new Random();
  var l = new List.generate(12, (_) => rng.nextInt(100));
}

我想使用dart生成6个不同随机数的数组,这种方式尚未出现在我已经拥有的数字列表中。

1 个答案:

答案 0 :(得分:0)

import 'dart:math';

void main() {  
    var listOfSets = List<Set<int>>();

    final int nElementsWithMax = 99;  
    final int kTaken = 6;    
    final int requiredResults = 3;

    for (int i = 0; i < requiredResults; i++) {
      bool isInList = false;
      Set<int> anewSet;
      do {
        anewSet = Set.of(listRandom(nElementsWithMax, kTaken));
        isInList = listOfSets.firstWhere(
                (setInList) => anewSet.intersection(setInList).length == anewSet.length,
            orElse: () => null)
            != null;
      } while (isInList);
      listOfSets.add(anewSet);
    }
    print(listOfSets);
}

List<int> listRandom(int maxNumber, int numberOfGenerations) {

  final random = Random();
  var currentOptions = List<int>.generate(maxNumber, (i) => i);

  var list = List.generate(numberOfGenerations, (_) {
    final index = random.nextInt(currentOptions.length);
    final result = currentOptions[index];
    currentOptions.removeAt(index);    
    return result;
  });
  return list;
}

请记住,您不能超过定义的here的组合限制。

对于您而言, requiredResults 不能超过(100!)/((6!*(100-6)!)...数量庞大