首页
学习
活动
专区
工具
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#语言的扩展方法
  • 随机数生成器的使用
  • 集合的遍历

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

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

相关·内容

  • dotnet 理解 IConfigurationProvider 的 GetChildKeys 方法用途

    我最近遇到了一个有趣的 Bug 让我调试了半天,这个 Bug 的现象是我的好多个模块都因为读取不到配置信息而炸掉,开始我没有定位到具体的问题,以为是我的配置服务器挂掉了。经过了半天的调试,才找到了是我新加入的使用 COIN 配置库的 ReadonlyCoinConfiguration 类型导致的,此 ReadonlyCoinConfiguration 类型继承 IConfigurationProvider 接口,但是我对 IConfigurationProvider 的 GetChildKeys 方法的理解不对,实现错了 GetChildKeys 方法,导致在枚举应用内的所有配置时,配置都会 ReadonlyCoinConfiguration 过滤掉,导致模块读取不到配置。本文将告诉大家 IConfigurationProvider 的 GetChildKeys 方法用途和如何正确实现他

    02
    领券