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

从C#中的List <T>中选择N个随机元素

作为一个云计算领域的专家,我可以告诉你,要从C#中的List <T>中选择N个随机元素,可以使用以下方法:

  1. 使用Fisher-Yates随机置乱算法对List进行随机排序。
  2. 选择前N个元素。

以下是一个示例代码:

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

public static class ListExtensions
{
    public static void Shuffle<T>(this IList<T> list)
    {
        int n = list.Count;
        while (n > 1)
        {
            n--;
            int k = Random.Next(n + 1);
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
}

public static class RandomExtensions
{
    private static readonly Random _random = new Random();

    public static int Next(this Random random, int maxValue)
    {
        return _random.Next(maxValue);
    }
}

public static class ListHelper
{
    public static List<T> GetRandomElements<T>(this List<T> list, int count)
    {
        list.Shuffle();
        return list.GetRange(0, count);
    }
}

使用示例:

代码语言:csharp
复制
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> randomElements = list.GetRandomElements(5);

这个方法可以在O(n)的时间复杂度内选择N个随机元素。

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

相关·内容

python随机取list中的元素

----------\n") f4.seek(10)                       #光标移动到10的位置 f4.write("test4")                    #再写入会将原内容覆盖...()) f8.write("-------------------\n".encode()) f8.close() #注:还有rU或r+U模式,"U"表示在读取时,可以将 \r \n \r\n自动转换成...#打开一个文件,修改完了写到一个新文件 f = open("file_test","r",encoding="utf-8") f_new = open("file_new","w",encoding=...) f.write("hello\n") f.write("hello\n") f.flush()       #当往文件写内容的时候,会有一个缓存,达到一个时间,一次往文件写入。...            #按字符读 print(f.tell()) f.seek(0)                   #把光标回到开头 f.seek(12)                  #把光标移动到12个字符的位置

1.6K10
  • Java 如何从一个 List 中随机获得元素

    概述 从一个 List 中随机获得一个元素是有关 List 的一个基本操作,但是这个操作又没有非常明显的实现。 本页面主要向你展示如何有效的从 List 中获得一个随机的元素和可以使用的一些方法。...选择一个随机的元素 为了从一个 List 中随机获得一个元素,你可以随机从 List 中获得一个索引的下标。 然后你可以使用这个随机的下标使用方法 List.get() 来随机获得元素。...有时候,你可能希望从 List 中选择一些元素,但是这些选择的元素是可以重复的。...如果你希望你选择的元素是不重复的话,你可以在选择后将选择后的元素从 List 中移除。...通过上面的内容,能够更好的帮助你了解有关 List 中的随机输出等情况。 https://www.ossez.com/t/java-list/13934

    1.8K10

    Java 如何从一个 List 中随机获得元素

    概述 从一个 List 中随机获得一个元素是有关 List 的一个基本操作,但是这个操作又没有非常明显的实现。 本页面主要向你展示如何有效的从 List 中获得一个随机的元素和可以使用的一些方法。...选择一个随机的元素 为了从一个 List 中随机获得一个元素,你可以随机从 List 中获得一个索引的下标。 然后你可以使用这个随机的下标使用方法 List.get() 来随机获得元素。...有时候,你可能希望从 List 中选择一些元素,但是这些选择的元素是可以重复的。...如果你希望你选择的元素是不重复的话,你可以在选择后将选择后的元素从 List 中移除。...通过上面的内容,能够更好的帮助你了解有关 List 中的随机输出等情况。 https://www.ossez.com/t/java-list/13934

    2K20

    - 从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的

    题目:从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的 Fisher-Yates洗牌算法是由 Ronald A.Fisher和Frank Yates于1938年发明的,后来被Knuth...用洗牌算法思路从1、2、3、4、5这5个数中,随机取一个数 4被抽中的概率是1/5 5被抽中的概率是1/4 * 4/5 = 1/5 2被抽中的概率是1/3 * 3/4 *...; i < m; i++) { int t = (int) (list.size() * Math.random()); System.out.println(list.remove...(t)); } } ---- Knuth洗牌算法 在上面的介绍的发牌过程中, Knuth 和 Durstenfeld 在Fisher 等人的基础上对算法进行了改进,在原始数组上对数字进行交互,...该算法的基本思想和 Fisher 类似,每次从未处理的数据中随机取出一个数字,然后把该数字放在数组的尾部,即数组尾部存放的是已经处理过的数字。

    1.7K10

    Java如何随机获取List中的元素?实现代码一次搞定!

    引言在Java开发中,我们经常会遇到从一个List中随机获取元素的需求。可能是需要随机展示广告、抽奖活动、随机推荐等场景。本文将介绍几种简单而高效的方法来实现这个功能,并给出相应的代码示例。...方法一:使用Random类我们可以利用java.util.Random类来生成一个随机索引,然后根据该索引从List中获取对应的元素。...接着,我们创建一个java.util.Random对象,并使用nextInt()方法生成一个介于0到List大小之间(不包括List大小)的随机索引。最后,通过get()方法获取对应索引的元素。...这个方法将会随机打乱List中的元素顺序。...的元素顺序,然后直接返回第一个元素。

    3.7K40

    【100个 Unity实用技能】| C# 中List 使用Exists方法判断是否存在符合条件的元素对象

    也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!...---- Unity 实用小技能学习 C# 中List 使用Exists方法判断是否存在符合条件的元素对象 在C#的List集合操作中,有时候需要根据条件判断List集合中是否存在符合条件的元素对象...此时就可以使用 List集合的扩展方法 Exists方法来实现 通过Exists判断是否存在符合条件的元素对象比使用for循环或者foreach遍历查找更直接。...public bool Exists(PredicateT> match); 下面简单用三种数据类型来对Exists方法进行一个简单的例子介绍,看看具体是怎样使用它的。...list1.Exists(t => t == 15); if (bRet == ture) { Console.WriteLine("存在该元素对象"); } else {

    2K20

    从列表中或数组中随机抽取固定数量的元素组成新的数组或列表

    从列表中或数组中随机抽取固定数量的元素组成新的数组或列表 1:python版本:python里面一行代码就能随机选择3个样本 >>> import random >>> mylist=list(range...个元素 >>> newlist [4, 7, 2] >>> newlist = random.sample(mylist, 3) #从mylist中随机获取3个元素 >>> newlist [4, 3..., 1] >>> newlist = random.sample(mylist, 3) #从mylist中随机获取3个元素 >>> newlist [5, 9, 3] >>> 2:jQuery版本...那么jQuery中怎么随机选出固定数组数组[1, 2, 3, 4, 5, 6, 7, 8, 9]中的三个元素,并构造成新数组的?...arr中,随机返回num个不重复项 function getArrayItems(arr, num) { //新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组; var

    6K10

    如何优雅的从Array中删除一个元素

    最近没有什么新文章可写了, 把以前的笔记拿来整理下, 做成文章以保持活跃度... 从JavaScript数组中删除元素是开发人员经常遇到的常见编程范例。...与许多JavaScript一样,这并不像它应该的那么简单。 实际上有几种方法可以从一个数组中删除一个或多个元素 - 在这个过程中不会撕掉你的头发 - 所以让我们一个接一个地浏览它们。...使用splice删除一个元素() 这个方法是在卸下,更换,和/或添加数组中的元素的通用方式。它与其他语言中的splice()函数类似。基本上,你采取一个数组并有选择地删除它的一部分(又名“拼接”)。...要从数组中的特定索引中删除一个元素: ["bar", "baz", "foo", "qux"] list.splice(2, 1)// Starting at index position 2, remove...如果你需要进行大量的过滤,使用filter()方法可能会清理你的代码。 结论 归结起来,在JavaScript中从数组中删除元素非常简单。

    9.8K50

    C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合ListT>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享。...1.关于Func Func是一种有任意个输入参数,有一个返回值的委托,在使用的过程中,Func,前n-1个是输入参数类型,第N个是输出参数类型。...如Fun compare=(x,y)=>{return x>y;}; 表示定义一个 两个输入参数为int类型的,输出类型为bool类型的委托。 2.Where() ?...可以看到 以List为例子,改where的参数为Func的委托,也就是说是一个输入值为string类型,输出为bool类型的委托。...如果返回为真,则该元素会被添加到IEnumerable中,通过对IEnumerable的遍历,可以将符合条件的每个元素输出。

    1.9K100

    【100个 Unity实用技能】| C#中List.Find 方法详解 查找符合要求的第一个元素并返回

    ---- Unity 实用小技能学习 C#中List.Find 方法详解 查找符合要求的第一个元素并返回 前面有篇文章介绍了List通过Exists来判断是否存在这个对象,返回一个布尔值。...public T Find(PredicateT> match); 泛型T为list定义的时候用户决定的存储类型,Predicate match 是一个委托,可理解为函数指针。...List中的被找到的对象的值,如果找不到,就会返回该种对象的默认值。...对象为 引用类型 时,对象的值为指向该对象的内存地址,可以直接用那个返回值直接修改list内的元素,此时对象的默认值为null。...如果对象为 值类型 ,对象的值就是对象本身,返回值传回的是该对象的一个拷贝,对传回那个对象的修改不能影响list中的元素。

    2.3K30
    领券