gpt4 book ai didi

c# - 如何使用 Linq 获取随机对象

转载 作者:IT王子 更新时间:2023-10-29 04:13:46 26 4
gpt4 key购买 nike

我试图在 linq 中获取一个随机对象。这是我的做法。

//get all the answers
var Answers = q.Skip(1).Take(int.MaxValue);
//get the random number by the number of answers
int intRandomAnswer = r.Next(1, Answers.Count());
int count = 0;

//locate the answer
foreach(var Answer in Answers)
{
if (count == intRandomAnswer)
{
SelectedPost = Answer;
break;
}
count++;
}

这是最好的方法吗?

最佳答案

关于:

SelectedPost = q.ElementAt(r.Next(1, Answers.Count()));

进一步阅读:

下面的评论对密切相关的问题做出了很好的贡献,我将把它们包括在这里,因为正如@Rouby 指出的那样,寻找这些问题的答案的人可能会找到这个答案,但在那些情况下它是不正确的.

整个输入中的随机元素

要使所有元素成为随机选择的候选者,您需要将输入更改为r.Next:

SelectedPost = Answers.ElementAt(r.Next(0, Answers.Count()));

@Zidad 添加了一个有用的扩展方法来获取序列中所有元素的随机元素:

public static T Random<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null)
{
throw new ArgumentNullException(nameof(enumerable));
}

// note: creating a Random instance each call may not be correct for you,
// consider a thread-safe static instance
var r = new Random();
var list = enumerable as IList<T> ?? enumerable.ToList();
return list.Count == 0 ? default(T) : list[r.Next(0, list.Count)];
}

关于c# - 如何使用 Linq 获取随机对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3173718/

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