所以我有一个预定义的数字列表,其中每个数字都由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个不同随机数的数组,这种方式尚未出现在我已经拥有的数字列表中。
答案 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)!)...数量庞大