gpt4 book ai didi

c# - 从集合中随机返回项目

转载 作者:行者123 更新时间:2023-11-30 13:11:45 25 4
gpt4 key购买 nike

我有一个方法可以从数据库返回一个通用列表集合 (List)。此集合有订单详细信息,即订单 ID、订单名称、产品详细信息等。

此外,该方法返回一个集合,该集合仅包含按订单日期降序排序的前 5 个订单。

我的要求是每次客户端调用这个方法时,我需要返回一个集合,其中有5个随机订单。

如何使用 C# 实现此目的?

最佳答案

我不久前写了一个 TakeRandom 扩展方法,它使用 Fisher-Yates shuffle 来实现。 .它非常高效,因为它只需要随机化您实际想要退回的商品数量,并且保证没有偏见。

public static IEnumerable<T> TakeRandom<T>(this IEnumerable<T> source, int count)
{
var array = source.ToArray();
return ShuffleInternal(array, Math.Min(count, array.Length)).Take(count);
}

private static IEnumerable<T> ShuffleInternal<T>(T[] array, int count)
{
for (var n = 0; n < count; n++)
{
var k = ThreadSafeRandom.Next(n, array.Length);
var temp = array[n];
array[n] = array[k];
array[k] = temp;
}

return array;
}

ThreadSafeRandom 的实现可以是 found at the PFX team blog .

关于c# - 从集合中随机返回项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com