首页 > 解决方案 > C# 从队列中选择一个随机项

问题描述

我想知道是否有可能从队列中取出随机项目?

Queue karten = new Queue();
        karten.Enqueue("Card 1");
        karten.Enqueue("Card 2");
        karten.Enqueue("Card 3");

        foreach(var x in karten)
        {
            Console.WriteLine(x);
        }

标签: c#

解决方案


您从根本上缺少 OOP 的基础知识:为您的目的使用适当的数据类型,并且不要使事情复杂化。

List<string> list = new List<string>(); //this is an Array List
list.Add("One");
list.Add("Two");
list.Add("Three");

list.RemoveAt(new Random().Next(0, list.Length - 1));

如果您需要访问可能在任何地方的项目,则必须使用数组或数组支持的列表(如 C# List<T>),访问元素的复杂度为 O(1),而删除的复杂度为 O(n)。链接列表具有 O(n) 访问权限来查找元素,然后 O(1) 可以删除您刚刚找到的项目。

这意味着如果你使用一个数组,它需要一个恒定的时间来通过它的索引找到一个元素,但是你必须将后续元素移动一个位置。相反,对于链表,如果您持有对要删除项目的引用,则需要花费恒定的时间来删除它。当然,如果你只知道它的位置,首先需要 O(n) 才能找到正确的项目

在这里,我们使用随机输入来删除项目。在现实生活中,您会期望用户输入来选择要删除的项目:因为这不在您的控制之下,所以这属于randomArray List 成功的方法


推荐阅读