我有一个数据结构,它包含相对少量的对象(大约1500个)和几个作用于它的方法。是否有编程模式来迭代数据上的方法而不是编写更多的样板代码?
答案 0 :(得分:1)
这取决于您使用的语言。但是,您要查找的概念是map。
它通常是这样的:
map f xs
在命令式的风格中,这将是:
for (int i = 0; i < xs.size(); i++) {
f(xs[i])
}
我刚看到C#标签。
在C#中,您可以使用功能样式,命令式样式或两者兼而有之。如果使用功能样式,则可以使用LINQ。但是,您的方法不应修改基础对象,因为LINQ语句不应有副作用。对于命令式样式,您只需使用foreach
即可。
您可以使用LINQ查询集合。例如,这会找到x
中的所有myObjects
,以便f(x)
:
var fs = myObjects.Where(x => f(x))
答案 1 :(得分:0)
如果这些方法之间的共性只是他们将列表作为输入并输出结果,但结果每次都是不同的类型,那么你可以去除多少。如果对结果类型有一些常见的抽象,你可以简单地将它建模为一系列:
Func<IEnumerable<TInput>, TResult>
然后你可Select()
Invoke()
这些函数的结果(或SelectMany()
如果你希望输出被展平)。
或者,你可以有一系列的
Func<TInput, TResult>
并迭代数据列表,逐个将所有函数应用于每个元素。但是结果将按1500个数据元素中的每一个进行排序,而不是每个函数的完整执行的连接。