c# - 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);
}
解决方案
您从根本上缺少 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) 才能找到正确的项目
在这里,我们使用随机输入来删除项目。在现实生活中,您会期望用户输入来选择要删除的项目:因为这不在您的控制之下,所以这属于random
Array List 成功的方法
推荐阅读
- javascript - 在序列/队列中使用 AJAX 上传多个文件
- javascript - 带有 wordpress 等按钮的文本区域
- python - python matplotlib pandas unstack问题
- python - 如何对 Pandas 生成的数据透视表进行排序
- karate - 如何从空手道 dsl api 响应中获取相关 ID?
- azure - Azure 密钥保管库基本
- php - 为什么我的流程在执行后会自我复制?该特定进程正在执行两次
- html - SVG 波在 Safari 中未拉伸到 100% 宽度
- ruby-on-rails - Ruby on rails:安装包时验证 SSL 证书的问题
- java - 对象关系映射