Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Examples of JS-Like higher-order functions in C#
//Rextester.Program.Main is the entry point for your code. Don't change it. //Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5 using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; namespace Rextester { public class Program { public static void Main(string[] args) { int[] data = new int[] {0, 1, 2, 3}; Console.WriteLine(data.CollStr()); Console.WriteLine(data.Map(x => x + 1).CollStr()); //print array human-readable Console.WriteLine(data.Filter(x => x > 1).CollStr()); //+1 to all Console.WriteLine(data.Fold(0, (i, o) => i + o)); //sum } } static class Extn { public static IEnumerable<Out> Map<In,Out>(this IEnumerable<In> a, Func<In,Out> f) { foreach(In i in a) yield return f(i); } public static Out Fold<In,Out>(this IEnumerable<In> a, Out initial, Func<In,Out,Out> f) { Out tor = initial; foreach(In i in a) tor = f(i, tor); return tor; } public static IEnumerable<T> Filter<T>(this IEnumerable<T> a, Func<T, bool> f) { foreach(T t in a) if(f(t)) yield return t; } public static string JoinToString<T>(this IEnumerable<T> a, string joiner = "") { string result = a.Fold("", (i, o) => o + i.ToString() + joiner); return joiner.Length == 0 ? result : result.Remove(result.Length - joiner.Length); } public static string CollStr<T>(this IEnumerable<T> coll) { string res = coll.Fold("[", (i, o) => o + i.ToString() + ","); return res.Remove(res.Length - 1) + "]"; } } }
run
|
edit
|
history
|
help
0
Range List for C#
Static 2
Testing
StopJoin.cs
1
Guid Combined
D112
C# goes Javascriptish (or Pythonish)
tool
Value Type vs Ref Type