我使用:
构建MyObject数组 MyObject[] myObject = (from MyObject varObj in MyObjects
select varObj).ToArray();
现在,我想从这个数组中提取3个随机MyObject!我怎么能在C#上做到?
当然,如果数组长度<3,我需要提取所有对象!
答案 0 :(得分:8)
您可以通过Linq执行此操作:
例如,随机选择3个流程:
var ps = (from p in Process.GetProcesses() orderby Guid.NewGuid() select p).Take(3);
你也可以使用random.Next()代替Guids(严格来说,正如LukeH所指出的那样,Guids是唯一的,但不是随机的。)
答案 1 :(得分:3)
MyObject[] myObject = ...;
int upper = 1;
if (myObject.Length > 1)
{
Random r = new Random();
upper = Math.Min(3, myObject.Length);
for (int i = 0; i < upper; i++)
{
int randInd = r.Next(i, myObject.Length);
MyObject temp = myObject[i];
myObject[i] = myObject[randInd];
myObject[randInd] = temp;
}
}
现在将数组的元素从0转换为upper
。
答案 2 :(得分:1)
使用Random
类C#
,您可以获得小于特定数字的随机int
,在您的情况下,其大小为myObject
我不确定您是否想要独特或者可以复制。
答案 3 :(得分:1)
怎么样?
Random r = new Random();
int item1 = r.Next(0, myObject.Length);
int item2 = r.Next(0, myObject.Length);
int item3 = r.Next(0, myObject.Length);
var result1 = myObject[item1];
var result2 = myObject[item2];
var result3 = myObject[item3];
没有Linq或任何东西,但它完成了工作。
答案 4 :(得分:1)
这个怎么样:
var random = new Random();
var objs = new Object[] { 1, 2, 3, 4, 5, 6, 7, 8 };
var result = objs.OrderBy(o => random.Next(Int32.MaxValue)).Take(3);
答案 5 :(得分:1)
更有创意。
var list = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 1, 2, 3, 44, 5, 6 };
Random random = new Random();
var results = list.OrderBy(i => random.Next()).Take(3);
输出:
results: {int[3]}
[0]: 3
[1]: 2
[2]: 5