dotnet 10 新的 LINQ 方法 Shuffle

360影视 欧美动漫 2025-03-22 08:32 5

摘要:Samplevarsource = Enumerable.Range(15).ToArray;Console.WriteLine(string.Join(",", source));source.Shuffle;Console.WriteLine(string

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

新引入的 API 定义如下:

namespaceSystem.Linq;

publicstaticclassEnumerable
{
publicstaticIEnumerable Shuffle(thisIEnumerable source) { }
}

publicstaticclassAsyncEnumerable
{
publicstaticIAsyncEnumerable Shuffle(thisIAsyncEnumerable source) { }
}

publicstaticclassQueryable
{
publicstaticIQueryable Shuffle(thisIQueryable source) { }
}
Samplevarsource = Enumerable.Range(15).ToArray;
Console.WriteLine(string.Join(",", source));
source.Shuffle;
Console.WriteLine(string.Join(",", source));

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

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

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

varsource = Enumerable.Range(15).ToArray;
Console.WriteLine(string.Join(",", source.Shuffle));

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

Console.WriteLine(string.Join(","6)));

输出结果如下:

output2那么如果是同一个Shuffle返回值,两次会不会一样呢,我们也来做一个测试varsource = Enumerable.Range(15).ToArray;
varshuffled = source.Shuffle;
Console.WriteLine(string.Join(",", shuffled));
Console.WriteLine(string.Join(",", shuffled));

输出结果如下:

output3

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

如果需要对数组进行重排可以使用 .NET 8 引入的Random.Shuffle方法,使用示例如下:Console.WriteLine("Random.Shared.Shuffle(array) sample");
vararray = Enumerable.Range(110).ToArray;
Console.WriteLine(string.Join(",", array));
Random.Shared.Shuffle(array);
Console.WriteLine(string.Join(",", array));
Random.Shared.ShuffleoutputReferences

.NET 8 Preview 1 中新增的 Random 方法

来源:opendotnet

相关推荐