首页
学习
活动
专区
工具
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.6K10

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

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

1.9K20

- 长度为mint数组随机取出n元素,每次取元素都是之前未取过

题目:长度为mint数组随机取出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.6K10

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

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

1.6K40

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

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

1.8K20

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

列表或数组随机抽取固定数量元素组成新数组或列表 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.6K50

2022-04-21:给定一包含 [0,n) 不重复整数黑名单 blacklist,写一函数 [0, n) 返回一不在 blacklist 随机整数

2022-04-21:给定一包含 [0,n) 不重复整数黑名单 blacklist, 写一函数 [0, n) 返回一不在 blacklist 随机整数, 对它进行优化使其尽量少调用系统方法...1 <= n <= 1000000000, 0 <= blacklist.length < min(100000, N)。 力扣710. 黑名单随机数。...范围是[0,n),黑马单有m;那么随机范围变成[0,n-m)。然后随机范围内数字,碰到黑名单数根据map映射。 代码用rust编写。...; } struct Solution { size: i32, convert: HashMap, } impl Solution { fn new(n:...n -= 1; while n > blacklist[i as usize] { if n == blacklist[(m - 1) as usize

1.1K40

如何List筛选出相同

问题 现有社保卡和身份证若干,想要匹配筛选出一一对应社保卡和身份证。 转换为List socialList,和List idList,二者找出匹配社保卡。...采用Hash 通过观察发现,两list取相同部分时,每次都遍历两list。那么,可以把判断条件放入Hash,判断hash是否存在来代替遍历查找。...判断key是否存在 4 //O(m,n)=2m+n=11 } 如此,假设hash算法特别好,hash时间复杂度为O(n)=n。...数据归纳法角度,n必须大于2,不然即演变程2m+2 < 2m。...事实上还要更快,因为hash还需要创建更多对象。然而,大部分情况下,n也就是第二数组长度是大于3。这就是为什么说hash要更好写。

6K90

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

在学习过程,发现泛型集合List有一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.7K100

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

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

1.7K30
领券