如何洗牌 ListT 中的元素?

咨询区

  • mirezus

是否有一个最佳的方式对 List<T> 进行洗牌排序,我的项目有一个抽奖模块,需要对一个有 75个元素的 List<T> 进行随机排序,请问大家有什么好的实现方式。

回答区

  • user453230

如果你仅仅是想对List中的item进行随机化排序,我个人推荐一种高效的方式,那就是按照 GUID 排序,参考如下代码:


var shuffledcards = cards.OrderBy(a => Guid.NewGuid()).ToList();

评论中有朋友指出了,GUID并不能保证完全随机化,所以还有另外一种方式就是使用 Random 类替代,参考如下:


private static Random rng = new Random();
...
var shuffledcards = cards.OrderBy(a => rng.Next()).ToList();
  • Xelights

如果你不介意使用两个List的话,那么我这个将是最简单粗暴的实现方式,但它不是最高效的。


List<int> xList = new List<int>() { 1, 2, 3, 4, 5 };
List<int> deck = new List<int>();foreach (int xInt in xList)deck.Insert(random.Next(0, deck.Count + 1), xInt);
  • Shehab Fawzy

你可以通过 扩展方法 的形式实现,首先定义一个扩展方法。


public static class IEnumerableExtensions
{public static IEnumerable<t> Randomize<t>(this IEnumerable<t> target){Random r = new Random();return target.OrderBy(x=>(r.Next()));}        
}

然后可以像下面这样调用。


// use this on any collection that implements IEnumerable!
// List, Array, HashSet, Collection, etcList<string> myList = new List<string> { "hello", "random", "world", "foo", "bar", "bat", "baz" };foreach (string s in myList.Randomize())
{Console.WriteLine(s);
}

点评区

这个问题挺有意思,前几年在项目开发中还真有这么一个需求,第一次我采用了 Guid.NewGuid(),但相信用过的朋友都知道,这玩意用起来真的太慢了,尤其上十万数据之后,所以后期采用了 new Random() 的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用3年时间破解学界200多年难题,年仅21岁的天才竟因谈了一场恋爱挂掉了.........

全世界只有3.14 % 的人关注了爆炸吧知识俗话说&#xff0c;英雄难过美人关&#xff0c;即便是智商超群的数学天才也毫不例外。破得了百年的世界难题&#xff0c;却解不开一个小小的爱情谜团......没错&#xff0c;这位为情所困的数学天才&#xff0c;便是今天的主人公——伽罗瓦…

投影变换与视口变换

一些说明&#xff1a; 0. 投影变换&#xff1a;描述如何指定视景体(viewing volume)的形状和方向。视口变换&#xff1a;解释如何控制三维模型坐标到屏幕坐标的变换。 1. 无论是透视投影还是平行投影&#xff08;正交投影&#xff09;&#xff0c;只有在视景体中的物体才可见。…

java 按钮设置图片_Java中如何设置带图片按钮的大小

在java部分需要用到图形界面编程的项目中&#xff0c;经常会使用图片设置对按钮进行美化&#xff0c;但是使用时会出现一个很麻烦的问题&#xff0c; 按照方法&#xff1a;JButton jb1 new JButton();jb1.setBounds(0, 0, 25, 20);ImageIcon ii new ImageIcon("images/x…

JAVA 异常库

为什么80%的码农都做不了架构师&#xff1f;>>> 1.java.lang.NumberFormatException: multiple points已解决 多线程方法中使用了共享变量SimpleDateFormat&#xff0c;报如下错误&#xff1a; java.lang.NumberFormatException: multiple points at sun.misc.Floa…

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换独立观察员 2021 年 8 月 23 日我们平常在 WPF 中进行资源绑定操作&#xff0c;一般就是用 StaticResource 或者 DynamicResource 后面跟上资源的 key 这种形式&#xff0c;能满足大部分需求。但是有的时候&am…

2009年最佳80后科技创业者

近日&#xff0c;《商业周刊》公布了2009年最有前途的科技初创公司及青年创业者名单&#xff0c;这些企业创始人年龄都在30岁及以下。商业周刊表示&#xff0c;从这些创业公司来看&#xff0c;创新依然存在并发展良好。以下为其详细名单&#xff0c;包括入选初创的业务描述以及…

Commons里的DButil

今天试用了一下&#xff0c;感觉还不错。说下需求&#xff1a;直接用jdbc天天开连接&#xff0c;关连接么的头疼。要将结果转化为xml格式&#xff0c;这个用XStream格式。用hibernate来搞这个有点杀鸡用牛刀的意思&#xff0c;如果直接用jdbc又有点繁琐。所以试用了一下这个东西…

你一直憋着的那个屁,放出来时真的有人知道吗?我先告诉你憋着不放的屁会到哪去……...

全世界只有3.14 % 的人关注了爆炸吧知识制作团队制作人 超模君编剧 恐恐恐插画 杨羊羊友情出演 超模君 想增加更多的奇怪知识&#xff1f;带你入学↓↓↓关注“爆炸吧知识”日增怪知识&#xff01;

Android中View绘制流程

2019独角兽企业重金招聘Python工程师标准>>> 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的&#xff0c;该函数做的执行过程可简单概况为 根据之前设置的状态&#xff0c;判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的…

从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery…

如何更改 C# Record 构造函数的行为

如何更改 C# Record 构造函数的行为Record[1] 是 C# 9 中的一个新功能。Record是从Structs[2]借用的特殊类&#xff0c; 因为它们具有 基于值的相等性&#xff0c;您可以将它们视为两类类型之间的混合体。默认情况下&#xff0c;它们或多或少是不可变的&#xff0c;并且具有语法…

java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例

所谓有权图&#xff0c;就是图中的每一条边上都会有相应的一个或一组值。通常情况下&#xff0c;这个值只是一个数字如&#xff1a;在交通运输网中&#xff0c;边上的权值可能表示的是路程&#xff0c;也可能表示的是运输费用(显然二者都是数字)。不过&#xff0c;边上的权值也…

[原]一步一步自己制作弹出框

说到javascript弹出框的制作,将其实现步骤分开&#xff0c;其实很容易。下面&#xff0c;将拆分页面弹出框的制作步骤。首先&#xff0c;准备编辑工具(废话)&#xff0c;其实&#xff0c;您可以使用notepad..嘿嘿。弹出框的组成结构&#xff1a; 1.一个页面遮罩层。 2.一个di…

那些你从未见过的神奇物理化学实验,今天全给你整理了!

全世界只有3.14 % 的人关注了爆炸吧知识1.电荷吸引水流2.比空气重的六氟化硫六氟化硫&#xff08;SF6&#xff09;&#xff0c;法国两位化学家Moissan和Lebeau于1900年合成的人造惰性气体&#xff0c;具有良好的电气绝缘性能及优异的灭弧性能&#xff0c;是一种优于空气和油之间…

Makefile 使用总结

1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些…

学C#的感想

我学C#已经一个学期了&#xff0c;却发现自己对C#的了解只是一点皮毛而已&#xff0c;根本什么都不能做。自己也试过去编写一些写程序&#xff0c;但就是只会那些简单的&#xff0c;一旦遇到复杂点的程序&#xff0c;就是狗咬乌龟—无从下口了。现在回想&#xff0c;都不知道自…

ASP.NET Core使用Middleware有条件地允许访问路由

问题有时&#xff0c;我们可能在Web API中包含一些具有调试功能的请求。比如我们上次的文章中“晕了&#xff01;这个配置值从哪来的&#xff1f;”使用的获取配置值的功能&#xff1a;endpoints.MapGet("/test2/{key:alpha}", async context > {var key context…

java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

代表任意一个字符&#xff0c;*代表任意一串字符&#xff0c;判断两个字符串是否匹配&#xff1f; 如题&#xff0c;代表任意一个字符&#xff0c;*代表任意一串字符&#xff0c;判断两个字符串是否匹配&#xff1f;假如a字符串为&#xff1a;as*bncb,b字符串为asdfgvbbnchb,则…

如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

Virtualbox 无缝整合linux和windows双系统

一直以来&#xff0c;为了使用公司规定的内部通信工具RTX, 而不得不在ubuntu上安装一个virtualbox以运行RTX, 但是由于是运行在虚拟机里面&#xff0c;所以经常不能及时的回复同时的消息&#xff0c;而造成沟通的延迟。 所以就想着&#xff0c;能不能及时的在ubuntu上面看到…