using System.Collections.Generic;
using System.Reactive.Linq;
var observable = Observable.Range(1, 100).Shuffle()
.Subscribe(n => Console.Write($"{n}, "));
public static class ObservableHelper {
public static IObservable<T> RandomSample<T>(this IObservable<T> source, int sampleSize)
=> source.Buffer(sampleSize, 1).Where(list => list.Count == sampleSize)
.Select(list => list[Random.Shared.Next(0, sampleSize)]);
public static IObservable<T> Shuffle<T>(this IObservable<T> source) {
List<T> emittedValues = [];
return source.Select(value => {
emittedValues.Add(value);
return emittedValues[Random.Shared.Next(0, emittedValues.Count)];