Intersperse implementation in C#
By Tan Lee Published on Nov 09, 2024 216
In this post, I'll demonstrate how to implement an Intersperse method in C# as an extension method on the IEnumerable<T> interface.
I used `yield` to minimize unnecessary iterations over the collection, reducing overhead. While I could have used a method like `Zip`, it would have introduced more complexity, requiring additional manipulation of the sequence. The `yield`-based approach is simpler and more efficient for this task.
public static class EnumerableExtensions { public static IEnumerable<T> Intersperse<T>(this IEnumerable<T>? source, T delimiter) { if (source is null) yield break; using var enumerator = source.GetEnumerator(); var hasFirstElement = enumerator.MoveNext(); if (hasFirstElement == false) yield break; yield return enumerator.Current; while (enumerator.MoveNext()) { yield return delimiter; yield return enumerator.Current; } } }
Usage
var text = new string("FoxLearn".Intersperse('-').ToArray()); // F-o-x-L-e-a-r-n var number = new string("100".Intersperse('x').ToArray()); // 1x0x0 var array = new[] { 1, 2, 3 }.Intersperse(10).ToArray(); // 1, 10, 2, 10, 3 var menus = new[] { "Home", "About", "Privacy" } // Home > About > Privacy .Intersperse(" > ") .Aggregate((a, b) => $"{a}{b}");
- Primitive types in C#
- How to set permissions for a directory in C#
- How to Convert Int to Byte Array in C#
- How to Convert string list to int list in C#
- How to convert timestamp to date in C#
- How to Get all files in a folder in C#
- How to use Channel as an async queue in C#
- Case sensitivity in JSON deserialization
Categories
Popular Posts
Horizon MUI Admin Dashboard Template
Nov 18, 2024
Elegent Material UI React Admin Dashboard Template
Nov 19, 2024
Dash UI HTML5 Admin Dashboard Template
Nov 18, 2024
Material Lite Admin Template
Nov 14, 2024