我有这个IEnumerable:
IEnumerable<MyObject>
Run Code Online (Sandbox Code Playgroud)
我需要随机订购MyObject列表.我需要强制转换为ArrayList吗?
或者我可以直接做到吗?谢谢
编辑
这是我的实际随机顺序函数:
IList<ArchiePacchettoOfferta> list = new List<ArchiePacchettoOfferta>(m_oEnum);
for (int i = 0; i < list.Count; ++i)
{
HttpContext.Current.Response.Write(list[i].Titolo + "<br />");
}
Random rnd = new Random();
for (int i = 0; i < list.Count; ++i)
{
int swapIndex = rnd.Next(i + 1);
ArchiePacchettoOfferta tmp = list[i];
list[i] = list[swapIndex];
list[swapIndex] = tmp;
}
for (int i = 0; i < list.Count; ++i)
{
HttpContext.Current.Response.Write(list[i].Titolo + "<br />");
}
Run Code Online (Sandbox Code Playgroud)
它每次以相同的方式命令列表:(
IEnumerable<int> ints;
var random = new Random();
var shuffled = ints.OrderBy(i => random.Next()).ToList();
Run Code Online (Sandbox Code Playgroud)
ToList仅用于确保在多次重复遍历迭代时返回相同(随机)顺序.当然,如果你不再需要原版,你可以随便洗牌
ints = ints.OrderBy(i => random.Next()).ToList();
Run Code Online (Sandbox Code Playgroud)
关于是否应该仅依赖OrderBy比较元素,有一些讨论.如果你不想信任你的.NET实现来做到这一点,请拼写出来:
var random = new Random();
var shuffled = ints
.Select(i => new { key=random.Next(), i })
.OrderBy(tmp => tmp.key)
.Select(tmp => tmp.i)
.ToList();
Run Code Online (Sandbox Code Playgroud)
有关此解决的潜在问题的更多背景,请参阅以下链接(主要是当前样本的性能下降,以及非均匀分布的风险):
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |