如何从数组中提取3个随机值?

mar*_*zzz 1 c#

我用以下代码构建MyObject数组:

    MyObject[] myObject = (from MyObject varObj in MyObjects
                           select varObj).ToArray();
Run Code Online (Sandbox Code Playgroud)

现在,我想从这个数组中提取3个随机MyObject!我怎么能在C#上做到这一点?

当然,如果数组长度<3,我需要提取所有对象!

Phi*_*mid 8

你可以通过Linq做到这一点:

  1. 以随机顺序检索项目(请参阅Jon Skeet对此SO问题的回答)
  2. 使用Take运算符选择结果列表的Top(3)

例如,随机选择3个进程:

var ps = (from p in Process.GetProcesses() orderby Guid.NewGuid() select p).Take(3);
Run Code Online (Sandbox Code Playgroud)

您也可以使用random.Next()而不是Guids(严格来说,正如LukeH所指出的,Guids是唯一的,但不是随机的).

  • 此解决方案在代码方面优雅,但在性能方面则不优雅.问题是它会对整个数组进行排序,这根本不是必需的. (2认同)
  • @Philipp Schmid对每个元素生成Guid只是为了改变他们的性能是如此浪费. (2认同)