首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >dotnet 10 新的 LINQ 方法 Shuffle

dotnet 10 新的 LINQ 方法 Shuffle

作者头像
郑子铭
发布2025-04-26 21:25:45
发布2025-04-26 21:25:45
9200
代码可运行
举报
运行总次数:0
代码可运行

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • dotnet 10 新的 LINQ 方法 Shuffle
    • Intro
    • New API
    • Sample
    • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档