首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何随机排序IEnumerable <>?

随机排序IEnumerable<>是指对一个IEnumerable<>集合进行随机排序,使得集合中的元素顺序随机且不重复。以下是一个完善且全面的答案:

要随机排序IEnumerable<>,可以使用Fisher-Yates随机排序算法。该算法的基本思想是,从原始集合中随机选择一个元素,将其与集合中的最后一个元素交换,然后将集合长度减1,重复该过程,直到集合长度为1。以下是一个C#实现:

代码语言:csharp
复制
using System;
using System.Collections.Generic;
using System.Linq;

public static class EnumerableExtensions
{
    public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source)
    {
        Random rng = new Random();
        T[] elements = source.ToArray();
        int n = elements.Length;
        while (n > 1)
        {
            n--;
            int k = rng.Next(n + 1);
            T temp = elements[k];
            elements[k] = elements[n];
            elements[n] = temp;
        }
        return elements;
    }
}

使用该扩展方法,可以对任何IEnumerable<>集合进行随机排序。例如:

代码语言:csharp
复制
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int> shuffledNumbers = numbers.Shuffle();
foreach (int number in shuffledNumbers)
{
    Console.WriteLine(number);
}

这个答案涵盖了以下知识点:

  • 随机排序IEnumerable<>的基本概念和算法
  • C#语言的扩展方法
  • 随机数生成器的使用
  • 集合的遍历

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 如何随机打乱列表(List)排序

场景: 现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。 专业点的术语:将一个容器中的数据每次随机逐个遍历一遍。...注意:不是生成一个随机的list集。 环境: Python 3.6 解决方案: 方案一: 有人可能会通过Random内置函数,来间接实现想要的结果。...输出结果: 第一次输出内容:[6, 5, 1, 3, 2, 4] 第二次输出内容:[6, 1, 3, 5, 2, 4] 第三次输出内容:[5, 3, 1, 2, 4, 6] 从结果我们可以看出,输出是完全随机的...可选参数random是一个从0到参数的函数,返回[0.0,1.0)中的随机浮点; 如果random是缺省值None,则将使用标准的random.random()。

7.6K10

Python 如何随机打乱列表(List)排序

场景: 现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。 专业点的术语:将一个容器中的数据每次随机逐个遍历一遍。...注意:不是生成一个随机的list集。 环境: Python 3.6 解决方案: 方案一: 有人可能会通过Random内置函数,来间接实现想要的结果。...输出结果: 第一次输出内容:[6, 5, 1, 3, 2, 4] 第二次输出内容:[6, 1, 3, 5, 2, 4] 第三次输出内容:[5, 3, 1, 2, 4, 6] 从结果我们可以看出,输出是完全随机的...可选参数random是一个从0到参数的函数,返回[0.0,1.0)中的随机浮点; 如果random是缺省值None,则将使用标准的random.random()。

2.1K00
  • 随机梯度下降算法过程详细解读_python 排序算法

    梯度下降算法 梯度下降,依照所给数据,判断函数,随机给一个初值w,之后通过不断更改,一步步接近原函数的方法。更改的过程也就是根据梯度不断修改w的过程。...以简单的一元函数为例 原始数据为 x_data = [1.0,2.0,3.0] y_data = [2.0,4.0,6.0] 因此我们设置函数为 对于该函数,我们的w是未知的,因此如何根据xy的数据,...首先我们要先给定一个随机w值,这个值可以是任何数,我们的算法就会根据我们所计算的cost函数,判断偏离正确数据有多大,之后根据梯度,对w进行更新,直到cost为0,我们也就获取到正确的w值。...因此解决办法就是随机梯度下降。...随机梯度下降 采用随机梯度下降,相较于求平均的cost,采用随机的loss函数,也就是每次只取一个值,还是上个例子,当这个人困在水池中是,突然随机出现一个点,告诉你你的周围还有更低点,你就可以走出水池,

    38920

    冒泡排序如何优化?

    冒泡排序,是经典的排序算法之一,简单粗暴,但是性能一般 思路 大概是循环遍历这个数组 ,遍历次数为数组的length减1次,长度为3的数据,把前两个元素与其他每个元素比较一次即可,最后一个元素,被动比较即可...(例如数组:[2,4,1],一共三个元素,length为3,排序需要比较两轮即可,第一轮2与4比较,因为2小于4,所以位置不动,下标向下移动一位,4和1比较,因为4大于1,所以位置互换,首轮排序结束结果...:[2,1,4],进入下次循环,2和1比较,位置互换,下标向下移动一位,2和4比较,位置不变,排序结束) h代码实现 var arr=[2,4,5,6,7,9,7,6,5,4,3,1]; function...console.log(x,'循环了几次') // 132 次 return arr; } console.log(maopao(arr)); 这样写有点浪费性能,因为每一次循环,后面都会多一个元素是排序完成的...var x=0; var len=arr.length; for (var i = 0; i <len-1; i++) { x++; // 每比完一个元素,后面就多一个排序完成的元素

    49520

    WordPress 技巧:如何生成随机字符

    special_chars:随机字符中是否包含一些特殊字符,包含:!@#我们在很多开发当中,都需要生成随机字符,一般就会使用下面的 PHP 函数实现了: 其实 WordPress 已经自带了随机字符生成函数:wp_generate_password,这个函数原来是用来生成用户默认密码时候用的,但是同样我们也可以用来生成随机字符,他有三个参数: $length...:要生成的随机字符的长度,默认为:12, $special_chars:随机字符中是否包含一些特殊字符,包含:!...@#$%^&*(),默认是 true,如果你要生成的随机字符不包含这些特殊字符,只是大小写字母加数字的话,这个参数要设置为 false。...比如我们要生成16位的随机字符,并且不包含任何特殊字符: ----

    46730

    百万考生分数如何排序 - 计数排序

    百万考生分数如何排序 - 计数排序 关注 「码哥字节」,这里有算法系列、大数据存储系列、Spring 系列、源码架构拆解系列、面试系列……敬请期待。...「码哥字节」之前分享了百万订单如何根据金额排序,就是运用了桶排序。 计数排序的核心在于将输入的数据值转换成键保存在数组下标,所以作为一种线性时间复杂度的排序,输入的数据必须是有确定且范围不大的整数。...假如 H 省有 80 万考生,如何通过成绩快速排序得出排名呢? 再比如统计每个省人口的每个年龄人数并且从小到大排序,又如何实现呢?...我们如何计算出每个分数的考生在有序数组对应的存储位置呢?这个思路很巧妙,主要是对之前的 countArray[6] 做一下转换。...比如 20 个随机整数,范围在 0 - 1 亿之间,这时候使用计数排序需要创建长度为 1 亿的数组,严重浪费空间。

    1.2K10
    领券