最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

dotnet 10 新的 LINQ 方法 Shuffle

网站源码admin1浏览0评论

dotnet 10 新的 LINQ 方法 Shuffle

dotnet 10 新的 LINQ 方法 Shuffle

Intro

dotnet 10 中引入了一个新的 LINQ 方法 Shuffle 可以将一个集合中的元素随机洗牌返回

New API

新引入的 API 定义如下:

代码语言:javascript代码运行次数:0运行复制
namespace System.Linq;

publicstaticclassEnumerable
{
    publicstatic IEnumerable<T> Shuffle<T>(this IEnumerable<T> source) { }
}

publicstaticclassAsyncEnumerable
{
    publicstatic IAsyncEnumerable<T> Shuffle<T>(this IAsyncEnumerable<T> source) { }
}

publicstaticclassQueryable
{
    publicstatic IQueryable<T> Shuffle<T>(this IQueryable<T> source) { }
}

Sample

代码语言:javascript代码运行次数:0运行复制
var source = Enumerable.Range(1, 5).ToArray();
Console.WriteLine(string.Join(",", source));
source.Shuffle();
Console.WriteLine(string.Join(",", source));

大家可以先猜一下输出结果会是什么,输出结果如下:

output

从上面的输出结果可以看得出来,原来的数组 source 中的元素并未改变,这是因为 Shuffle 方法并不会改变原有数组,而是返回一个新的 IEnumerable 对象

我们再来做一些测试,看看返回的数据,测试代码如下:

代码语言:javascript代码运行次数:0运行复制
var source = Enumerable.Range(1, 5).ToArray();
Console.WriteLine(string.Join(",", source.Shuffle()));

Console.WriteLine(string.Join(",", source.Shuffle().Take(3)));
Console.WriteLine(string.Join(",", source.Shuffle().Take(3)));

Console.WriteLine(string.Join(",", source.Shuffle().Take(6)));

输出结果如下:

output2

那么如果是同一个 Shuffle 返回值,两次会不会一样呢,我们也来做一个测试

代码语言:javascript代码运行次数:0运行复制
var source = Enumerable.Range(1, 5).ToArray();
var shuffled = source.Shuffle();
Console.WriteLine(string.Join(",", shuffled));
Console.WriteLine(string.Join(",", shuffled));

输出结果如下:

output3

可以看到即使是同一个 shuffle 返回值的对象,每次使用时也不相同,实际数据的填充是遍历时获取的,并不是提前生成好的,确定的

如果需要对数组进行重排可以使用 .NET 8 引入的 Random.Shuffle 方法,使用示例如下:

代码语言:javascript代码运行次数:0运行复制
Console.WriteLine("Random.Shared.Shuffle(array) sample");
var array = Enumerable.Range(1, 10).ToArray();
Console.WriteLine(string.Join(",", array));
Random.Shared.Shuffle(array);
Console.WriteLine(string.Join(",", array));

输出结果如下:

Random.Shared.Shuffle output

References

  • .NET 8 Preview 1 中新增的 Random 方法
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-25,如有侵权请联系 cloudcommunity@tencent 删除测试数据数组linqshuffle

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论