Dart 中的 List.shuffle()?
Posted
技术标签:
【中文标题】Dart 中的 List.shuffle()?【英文标题】:List.shuffle() in Dart? 【发布时间】:2012-11-13 07:07:46 【问题描述】:我正在寻找网络上的所有地方(dart 网站、***、论坛等),但找不到答案。
所以我的问题是:我需要编写一个函数,打印随机排序的列表,巫婆作为参数提供。 : 飞镖也是如此。
我尝试使用地图,使用集合,使用列表......我尝试使用断言的方法,使用排序,我在 dart 库上查看使用数学的随机方法......没有什么可以做我想做的。
有人可以帮我解决这个问题吗?
这里有一些草稿:
var element03 = query('#exercice03');
var uneliste03 = '01':'Jean', '02':'Maximilien', '03':'Brigitte', '04':'Sonia', '05':'Jean-Pierre', '06':'Sandra';
var alluneliste03 = new Map.from(uneliste03);
assert(uneliste03 != alluneliste03);
print(alluneliste03);
var ingredients = new Set();
ingredients.addAll(['Jean', 'Maximilien', 'Brigitte', 'Sonia', 'Jean-Pierre', 'Sandra']);
var alluneliste03 = new Map.from(ingredients);
assert(ingredients != alluneliste03);
//assert(ingredients.length == 4);
print(ingredients);
var fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
【问题讨论】:
“随机排序”是什么意思?您是否尝试将元素按随机顺序排列? 没错,我想把这些元素随机排列。 在这种情况下,请查看shuffling algorithms。我没有时间想出一个完整的解决方案,但希望这会有所帮助。也看看这个SO question 这里是请求此功能的错误,请为它投票:code.google.com/p/dart/issues/detail?id=6788 自几个月以来,List 类中实现了一个 List.shuffle 方法 【参考方案1】:List 类中有一个shuffle 方法。这些方法将列表打乱。您可以不带参数调用它或提供随机数生成器实例:
var list = ['a', 'b', 'c', 'd'];
list.shuffle();
print('$list');
collection
包带有一个 shuffle
函数/扩展,它还支持指定一个子范围来随机播放:
void shuffle (
List list,
[int start = 0,
int end]
)
【讨论】:
这应该是现在的答案! 很遗憾它没有返回流等列表。 @LechMigdal 我更新了我的原始答案,所以它现在是最新的。items..shuffle();
为我工作。它返回一个对象列表【参考方案2】:
这是一个基本的shuffle
函数。请注意,由此产生的洗牌在密码学上并不强。它使用 Dart 的 Random
类,该类产生不适合加密使用的伪随机数据。
import 'dart:math';
List shuffle(List items)
var random = new Random();
// Go through all elements.
for (var i = items.length - 1; i > 0; i--)
// Pick a pseudorandom number according to the list length
var n = random.nextInt(i + 1);
var temp = items[i];
items[i] = items[n];
items[n] = temp;
return items;
main()
var items = ['foo', 'bar', 'baz', 'qux'];
print(shuffle(items));
【讨论】:
谢谢,它工作得很好!我将您的评论作为答案发布! 您的代码与modern algorithm of Knuth suffle 之间存在差异。想要吗? (random.nextInt(items.length)
与 random.nextInt(j + 1)
)
按照现代算法其实不应该是:random.nextInt(i+1)?
确实n = random.nextInt(items.length)
确实有缺陷。详情请见en.wikipedia.org/wiki/…。
当然,这些天你应该使用 List.shuffle,而不是这个手动代码。以上是关于Dart 中的 List.shuffle()?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 dart 中的属性名称获取属性值(dart 中的 html 属性中的 _EVENTVALIDATION)?