gpt4 book ai didi

c# - 获取不同类型的固定长度的随机项目

转载 作者:可可西里 更新时间:2023-11-01 08:19:02 26 4
gpt4 key购买 nike

我有一个 List<Fruit> ,

public class Fruit
{
public string Name { get; set; }
public string Type { get; set; }
}

上面的列表包含两种类型的 30 个 Fruit 对象:AppleOrange . 20 个苹果和 10 个橙子。

List<Fruit> fruits = new List<Fruit>();
fruits.Add(new Fruit(){ Name = "Red Delicious", Type = "Apple" });
fruits.Add(new Fruit(){ Name = "Granny Smith", Type = "Apple" });
fruits.Add(new Fruit(){ Name = "Sour Granny", Type = "Orange" });
fruits.Add(new Fruit(){ Name = "Delicious Yummy", Type = "Orange" });
.....

我如何获得 10 个随机水果的列表(从 30 个水果的篮子中),但应该有 3 个橙子和 7 个苹果?

最佳答案

您可以使用 LINQ 和 GuidRandom 进行随机选择:

var apples = fruits.
Where( f => f.Type == "Apple" ). //choose only from apples
OrderBy( f => Guid.NewGuid() ). //order randomly
Take( 7 ). //take 7 apples
ToList();

oranges 也是如此,只是用 "Orange" 代替 "Apple" 并且用 3 而不是 7。

它是如何工作的?

OrderBy 根据给定条件对可枚举对象进行排序。因为 Guid.NewGuid() 返回一个随机的唯一标识符,所以结果是项目是随机排序的。当我们随后应用 Take( n ) 时,它将按此随机顺序获取 n 的第一个项目。

注意,您可以创建 Random 的实例,而不是 Guid 并使用 f => random.NextDouble() 作为 OrderBy 表达式。这可能是一个更安全的解决方案,因为 Guid.NewGuid() 不能保证是随机的,只能是唯一的

关于c# - 获取不同类型的固定长度的随机项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41415218/

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