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

如何在C#中通过循环确保列表包含7个唯一随机数?

解决生成7个唯一随机数的问题

你遇到的问题其实很好理解——原来的代码应该是先把随机数加入列表,遇到重复再删除,但删除后没有补充新的随机数来填补空缺,所以最后列表的长度自然达不到7个啦。比如本来生成了一个重复项,删掉后列表少了一个元素,可循环又没继续生成新数,结果就只能得到5个、6个这种不足7个的情况。

给你两种简单靠谱的解决方案:

方法一:用HashSet自动去重(推荐)

HashSet本身就不允许重复元素,而且判断元素是否存在的效率比List高很多,非常适合这个场景:

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        // 把Random实例放在循环外,避免因时钟问题生成重复随机数
        Random random = new Random();
        HashSet<int> uniqueNumbers = new HashSet<int>();
        
        // 持续生成随机数,直到集合里有7个唯一元素
        while (uniqueNumbers.Count < 7) {
            // 这里可以替换成你需要的数字范围,比如random.Next(1, 50)就是1到49的数
            int newNum = random.Next(0, 100);
            // HashSet遇到重复值会自动忽略,不用额外判断
            uniqueNumbers.Add(newNum);
        }
        
        // 把HashSet转成你需要的List
        List<int> mylist = new List<int>(uniqueNumbers);
        
        // 验证输出
        foreach (int num in mylist) {
            Console.WriteLine(num);
        }
    }
}

方法二:用List手动判断后添加

如果你更习惯用List,那可以在添加前先检查元素是否存在,不存在再添加,这样就不会出现先加后删的问题:

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        Random random = new Random();
        List<int> mylist = new List<int>();
        
        while (mylist.Count < 7) {
            int newNum = random.Next(0, 100);
            // 只有当列表里没有这个数时才添加
            if (!mylist.Contains(newNum)) {
                mylist.Add(newNum);
            }
        }
        
        foreach (int num in mylist) {
            Console.WriteLine(num);
        }
    }
}

小提醒

一定要把Random的实例创建在循环外面哦!如果在循环里每次都new一个Random,因为系统时钟的精度问题,很可能会生成一连串重复的随机数,反而达不到效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:34:20