【发布时间】:2018-01-13 19:43:15
【问题描述】:
我想编写一个函数序列,当给定一个字符串时,将它传递给所有创建的函数并生成一个修改后的字符串。 例如
string[] arr = {"po", "ro", "mo", "do"};
var modify = "pomodoroX";
foreach (var token in arr)
{
modify = modify.Replace(token, "");
}
Console.WriteLine(modify); // Output: X
这解决了问题,但我对功能解决方案感兴趣:
Console.WriteLine(
arr.Select<string, Func<string, string>>(val => (s1 => s1.Replace(val, string.Empty)))
.Aggregate((fn1, fn2) => fn1 += fn2)
.Invoke("pomodoroX")
);
// Output: pomoroX -> Only last element applied because:
// the functions are not getting combined.
所以基本上,取数组“arr”并为每个字符串创建一个删除该字符串的函数。
当前的解决方案存在缺陷,仅应用最后一个函数,我似乎无法将其转换为委托,以便将它们与 += 运算符结合起来。
或者有更好的功能解决方案吗?
【问题讨论】:
标签: c# functional-programming purely-functional