You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何<int>[]生成的随机数有重复,<int>{}生成的无重复?

问题原因说明

两段代码的随机数生成逻辑完全一致,结果不同的核心原因是你用了两种特性完全不同的Dart数据结构:

  • <int>[] 创建的是List(列表)
    List是有序结构,允许存储重复元素。它的add()方法不会做任何去重判断,不管你传的元素之前有没有存过,都会直接追加到列表尾部,每调用一次add,列表长度固定+1。
    第一段代码的循环会刚好执行100次,每次生成的随机数哪怕和之前的数重复,也会被直接塞进列表,最后得到的100个元素自然有重复。

    final generatedRandoms = <int>[];
    
    final rng = Random();
    while (generatedRandoms.length < 100) {
      final gr = rng.nextInt(100) + 1;
      generatedRandoms.add(gr);
    }
    
  • <int>{} 创建的是Set(集合)
    Set天生要求元素唯一,不允许重复值存在。它的add()方法会先检查你要加的元素是不是已经在集合里了:如果已经存在,这次add就不会生效,集合长度不会变;只有加的是之前没有的新元素,才会真正存进去,长度+1。
    第二段代码的循环终止条件是集合长度到100,重复生成的随机数会被自动跳过,直到凑够100个不重复的数才会停,最后结果自然没有重复值。

    final generatedRandoms = <int>{};
    
    final rng = Random();
    while (generatedRandoms.length < 100) {
      final gr = rng.nextInt(100) + 1;
      generatedRandoms.add(gr);
    }
    

补充:你这里随机数生成范围是1~100的整数,刚好和要凑的元素数量相等,所以第二段代码跑出来的结果其实就是1到100所有数的随机乱序,不会缺数也不会重复。

内容的提问来源于stack exchange,提问作者Ulmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:24:24