对于我编写的几乎所有代码,我经常处理集合上的集合减少问题,这些问题最终会在它们内部出现天真的“if”条件。这是一个简单的例子:
for(int i=0; i<myCollection.size(); i++)
{
if (myCollection[i] == SOMETHING)
{
DoStuff();
}
}
使用函数式语言,我可以通过(轻松)将集合减少到另一个集合来解决问题,然后对我的缩减集执行所有操作。在伪代码中:
newCollection <- myCollection where <x=true
map DoStuff newCollection
在其他 C 变体中,比如 C#,我可以使用 where 子句来减少
foreach (var x in myCollection.Where(c=> c == SOMETHING))
{
DoStuff();
}
或者更好(至少在我看来)
myCollection.Where(c=>c == Something).ToList().ForEach(d=> DoStuff(d));
诚然,我正在做很多范式混合和基于主观/意见的风格,但我不禁觉得我错过了一些真正基础的东西,这些东西可以让我在 C++ 中使用这种首选技术。有人可以启发我吗?
原文由 Darkenor 发布,翻译遵循 CC BY-SA 4.0 许可协议
恕我直言,使用带有 if 的 for 循环更直接且更具可读性。但是,如果这对您来说很烦人,您可以使用
for_each_if
如下所示:用例:
现场演示