- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找在 c# 中实现延迟洗牌。
我只关心处理前几个元素所需的时间。我不在乎原始列表是否被修改(即删除元素就可以了)。我不在乎处理时间是否随着迭代器到达列表的末尾而变长(当然,只要它保持在合理的范围内)。
上下文:我有一个很大的列表,我想从中获取相对较少的随机样本。在大多数情况下,我只需要第一个随机元素,但在同样罕见的情况下,我需要列表中的所有元素。
如果可能的话,我想将其作为扩展方法来实现,就像这样(但没有扩展方法的答案也很好):
public static class Program
{
public static IEnumerable<T> lazy_shuffle<T>(this IEnumerable<T> input, Random r)
{
//do the magic
return input;
}
static void Main(string[] args)
{
var start = DateTime.Now;
var shuffled = Enumerable.Range(0, 1000000).lazy_shuffle(new Random(123));
var enumerate = shuffled.GetEnumerator();
foreach (var i in Enumerable.Range(0, 5))
{
enumerate.MoveNext();
Console.WriteLine(enumerate.Current);
}
Console.WriteLine($"time for shuffling 1000000 elements was {(DateTime.Now - start).TotalMilliseconds}ms");
}
}
笔记:
input.OrderBy(i => r.Next())
还不够好,因为一旦为列表的每个元素生成一个随机数,它就需要遍历整个列表。 Count
存在。存在对元素的随机访问。它不是严格意义上的不可枚举,而只是一个大 List
或 Array
.我已将问题更新为“列表”而不是“可枚举”。只有惰性洗牌器的输出需要是可枚举的,源可以是一个实际的列表。 最佳答案
由于原始列表可以修改,这里提供一个非常简单高效的解决方案,基于this answer :
public static IEnumerable<T> Shuffle<T>(this IList<T> list, Random rng)
{
for(int i = list.Count - 1; i >= 0; i--)
{
int swapIndex = rng.Next(i + 1);
yield return list[swapIndex];
list[swapIndex] = list[i];
}
}
关于c# - 如何在 C# 中实现列表的延迟改组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68375051/
我有以下字符串到 json 代码: json = new JSONObject( "{\"Questions\":{"
我在 C++ 中有一个包含 20 个整数的数组,我想打乱它们(随机顺序)。 我还想以这样的方式对它们进行排序,即前 10 个数字按升序排列最小,其余的只是随机的。 有没有办法自动执行此操作? 最佳答案
我正在尝试在 Java 上实现 Fisher-Yates 洗牌算法。它可以工作,但是当我的 ArrayList 的大小大于 100000 时,它会变得非常慢。我将向您展示我的代码,您是否看到任何优化代
有问题的代码: random_items = random.shuffle(Item.query.all())[20:30] 它在 Flask/SQLAlchemy 应用程序中。Item 是模型。
我目前正在尝试找到一种方法来按行随机化数据框中的项目。我在 pandas ( shuffling/permutating a DataFrame in pandas ) 中发现了这个关于 shuffl
在 pandas 中按行或按列对数据帧进行洗牌的简单而有效的方法是什么? IE。如何编写函数shuffle(df, n, axis=0)这需要一个数据帧,许多洗牌n , 和一个轴(axis=0 是行,
我刚开始接触 Objective-C,我正在尝试对数组进行排序,以使其差异尽可能小。 int main() { NSAutoreleasePool * pool = [[NSAutorelea
我正在使用此代码使用 Fisher-Yates 随机化算法的变体生成 vector 的随机排列(我从第一个元素到最后一个元素,而不是相反)。我在一个程序中全局使用 boost::random::mt1
哪些 SSE/AVX 指令将 channel 从 a 打乱为 b 和 c? float4 a = {data[0], data[1], data[2], data[3]}; float4 b = {d
15 个中!数字 1-15 的可能排列,我需要选择 10!他们是随机的。 不幸的是,虽然 this answer 中的方法如果我迭代前 10 个排列,可以避免存储所有排列并对其进行洗牌时遇到的内存不足
我是一名优秀的程序员,十分优秀!