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)?

Dart 中的 Http 帖子

Dart 中的空安全是啥?

DART SQL 如何从 Dart 中的 SQL 查询结果中读取多行值(多列)?

Dart 中的快照概念是啥?

Flutter/Dart - Dart中的抽象类 多态 和接口