.Net has IEnumerable to represent a sequence. Though it is not advertised as a functional helper, we can use IEnumerable to get really clean functional programming in .Net. It has so many methods to manipulate and select elements but it really lacks a mechanism to take random numbers from the sequence. Below is one which gives us somewhat random elements from the IEnumerable sequence.
How to use the above?
public static IEnumerable<TResult> Randomize<TResult>(this IEnumerable<TResult> source) { return source. Select((sourceItem, index) => new { Item = sourceItem, Id = Guid.NewGuid() }). OrderBy(t1 => t1.Id).Select(t1 => t1.Item); }
How to use the above?
IEnumerable<int> input = new List<int>() { 1, 2, 3, 4 }; int randomElement = input.Randomize().FirstOrDefault();
As seen in the source the randomization is depended on the GUID generation. If the GUIDs are generated in increasing order the randomization will not work.
The advantage of this method is to randomize as lazy collection.
https://www.nuget.org/packages/DotNet.Helpers
The advantage of this method is to randomize as lazy collection.
Nuget support
The above is available as nuget. Below is the URL.https://www.nuget.org/packages/DotNet.Helpers
No comments:
Post a Comment