首页
学习
活动
专区
工具
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位的随机字符,并且不包含任何特殊字符: ----

    46530

    如何实现快速排序

    1 问题 在我们学习Python过程中,会经常遇到很多数值,在一些题目中会让我们进行简单的排序,但如果数值变多,那么我们如何用更简单的方法实现这些数值快速排序呢?...2 方法 快速排序主要思想为取数组中一个数作为基准值,把所有小于基准值的数放在它的左侧,把大于基准值的数放在它的右侧,方法如下: 建立一个列表,在其中一些输入无顺序的数值; 定义一个函数方法实现排序;...使用if,len()函数来判断列表长度来决定是否需要排序; 代码清单 1 nums = [2,1,4,3,9,6,7] def quicksort(num): if len(num) <=1: return...append(num[i]) return quicksort(lst1) + lst2 + quicksort(lst3) print(quicksort(nums)) 3 结语 针对多个数值快速排序问题...,提出定义空列表来储存比较基准值元素大小方法,通过Python代码输入实验,证明该方法是有效的,本文的方法需要额外开辟空间给用于归类的列表,未来可以继续研究如何使用更简洁更快的代码来进行快速排序

    12210
    领券