C# 生成一个介于1和10之间的唯一随机数?

C# 生成一个介于1和10之间的唯一随机数?,c#,unity3d,C#,Unity3d,我想生成一个介于1和10之间的唯一随机数字。如果某个数字重复出现,则脚本应跳过该数字并尝试另一个数字。如果没有留下唯一的号码,则应生成一条消息。实现这一概念的逻辑是什么 public int number; void Update () { if(Input.GetKeyDown(KeyCode.A)) { number= Random.Range(1,10); } } 编辑:它不是用户发布的链接的副本,因

我想生成一个介于1和10之间的唯一随机数字。如果某个数字重复出现,则脚本应跳过该数字并尝试另一个数字。如果没有留下唯一的号码,则应生成一条消息。实现这一概念的逻辑是什么

public int number; 

    void Update () {
        if(Input.GetKeyDown(KeyCode.A))
        {
          number= Random.Range(1,10);
        }
    }
编辑:它不是用户发布的链接的副本,因为我正在尝试生成唯一编号,如果某个特定编号重复,脚本将忽略该编号并尝试查找其他编号

  • 在唤醒时设置包含所有有效值的列表
  • 从列表中获取一个随机值
  • 从列表中删除该值以避免重复
  • 奖励-您还可以扩展类来设置任何最小值和最大值
  • 公共类随机生成器:单行为
    {
    public int minNumber=1;
    公共整数maxNumber=10;
    私有列表有效编号;
    公共整数;
    私人空间
    {
    _ValidNumber=新列表();
    
    对于(inti=minNumber;i,正如大家在评论中建议的那样,洗牌可能会奏效:

    public class Shuffler
    {
        private readonly Queue<int> _queue;
    
        public Shuffler(int max)
        {           
            _queue = new Queue<int>(Enumerable.Range(1, max).OrderBy(x => UnityEngine.Random.value));
        }
    
        public bool TryGetNext(out int item)
        {
            if(_queue.Count == 0)
            {
                item = -1;
                return false;
            }
    
            item = _queue.Dequeue();
            return true;
        }
    }
    

    洗牌的可能重复会更符合逻辑。创建一个
    1..10
    值的集合,洗牌,然后在所有项都被取下时从中取出
    1st、2nd、…、10th
    项生成消息可能不重复的重复。非常相似,但Unity Random的行为不同于System Random。工作原理类似于c有害!似乎您将“此其他问题”链接到此问题。感谢您的评论。刚刚更新了链接:
    public class RandomNumber : MonoBehaviour
    {
        private Shuffler _shuffler;
    
        public int number;
    
        private void Awake()
        {
            _shuffler = new Shuffler(10)
        }
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                if(!_shuffler.TryGetNext(out number))
                {
                    Debug.Log("No valid Numbers");
                }
            }
        }
    }