リストから,各要素に任意の重み付けをして要素をランダム取得しようと思ったのですが、Dartのmath.Randomクラスにはそのようなメソッドがなさそうだったので、力技ですが自作してみました。
(「Dart 重み random」 とかでググると、Dartではなくダーツの話をしているJavascript記事が出てきてしまう。。)
import "dart:math";
void main() {
// 候補となる要素と、対応する重みの配列を用意
List<String> fruits = ["apple", "orange", "grape", "banana"];
List<int> weights = [1, 2, 3, 4];
List<int> l = [];
weights.asMap().forEach((int idx, int weight) { // weightsの各要素とそのindexを取得
l += List.filled(weight, idx); // 長さ:weight, 全要素がidxの作成してlに連結していく
});
print(l); // ["0", "1", "1", "2", "2", "2", "3", "3", "3", "3", ]
// 上記で生成した配列から1つ選ぶことで、重みつきのchoiceを実行
var _random = new Random();
int idx = l[_random.nextInt(l.length)];
print(fruits[idx]);
}
※Dartに慣れていないため、コメントが冗長ですがご容赦ください。
よりスマートな方法があればコメントいただけると幸いです。