用C语言实现函数语言中的Map和Reduce操作
来源:互联网 发布:新手debian和ubuntu 编辑:程序博客网 时间:2024/05/21 09:10
在Google 的论文《MapReduce:Simplified Data Processing on Large Clusters》中提到“Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional lanuages.”。对于大部分不熟悉函数语言的程序员来说,可能并不能够彻底理解Map和Reduce的具体含义。在这篇文章中,将采用C语言实现函 数语言中的Map和Reduce操作。
简单来说,Map是对一组数据中的每个元素进行操作,产生一组全新的数据;Reduce是对这组数据进行归约,得到一个相对简单的结果。现在就让我们用C语言来描述它们。
参考:(1) 从Map和Reduce说起
简单来说,Map是对一组数据中的每个元素进行操作,产生一组全新的数据;Reduce是对这组数据进行归约,得到一个相对简单的结果。现在就让我们用C语言来描述它们。
#include <stdio.h>
//函数指针申明
typedef int (*mapFunction)(int);
typedef int (*reduceFunction)(int,int);
#define ERROR -1;
//-----------------Map和Reduce操作-----------------
/*
* 对list数组的数据进行处理,然后存储在list数组中
*/
void map(mapFunction func,int *list,int len){
int i;
for(i=0;i<len;i++){
list[i] = func(list[i]);
}
}
int reduce(reduceFunction func,int *list,int len){
if(len <= 0){
return ERROR;
}
int retVal = 0;
int i;
for(i=0;i<len;i++){
retVal = func(retVal,list[i]);
}
return retVal;
}
//-----------------------测试-------------------------
int square(int i){
return i*i;
}
int add(int i,int j){
return i+j;
}
int main(int argc,char*argv[]){
int array[5];
int i;
for(i=0;i<5;i++){
array[i] = i;
}
mapFunction mapFuncPointer = (mapFunction)□
reduceFunction reduceFuncPointer = (reduceFunction)&add;
map(mapFuncPointer,array,5);
int result = reduce(reduceFuncPointer,array,5);
printf("The result is %d ",result);
return 0;
}
//函数指针申明
typedef int (*mapFunction)(int);
typedef int (*reduceFunction)(int,int);
#define ERROR -1;
//-----------------Map和Reduce操作-----------------
/*
* 对list数组的数据进行处理,然后存储在list数组中
*/
void map(mapFunction func,int *list,int len){
int i;
for(i=0;i<len;i++){
list[i] = func(list[i]);
}
}
int reduce(reduceFunction func,int *list,int len){
if(len <= 0){
return ERROR;
}
int retVal = 0;
int i;
for(i=0;i<len;i++){
retVal = func(retVal,list[i]);
}
return retVal;
}
//-----------------------测试-------------------------
int square(int i){
return i*i;
}
int add(int i,int j){
return i+j;
}
int main(int argc,char*argv[]){
int array[5];
int i;
for(i=0;i<5;i++){
array[i] = i;
}
mapFunction mapFuncPointer = (mapFunction)□
reduceFunction reduceFuncPointer = (reduceFunction)&add;
map(mapFuncPointer,array,5);
int result = reduce(reduceFuncPointer,array,5);
printf("The result is %d ",result);
return 0;
}
- 用C语言实现函数语言中的Map和Reduce操作
- 实例讲解hadoop中的map/reduce查询(python语言实现)
- 实例讲解hadoop中的map/reduce查询(python语言实现)
- 【C】C语言中的字符串操作函数
- Python中的map()和reduce()函数
- 用C和C++,两种方式实现C语言中的printf函数
- c语言中的字符串操作函数
- C 语言中的文件操作函数
- Map 和 Reduce函数
- 不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:
- C语言中的函数和函数指针
- C语言字符操作函数实现
- C语言模拟实现字符串操作函数
- C语言中的随机函数实现
- 【面试中的】C语言实现字符串函数
- 模拟实现C语言中的字符串函数
- C语言中的atoi函数的实现
- 实现c语言中的可变参数函数
- IBM Global Delivery笔试[2006.10.30]
- blogspot挂了,阵地转移到CSDN
- 广东北电二面[2006.10.30]
- WINDOWS的几个启动项
- BFC皇家巴塞罗那!公益先锋
- 用C语言实现函数语言中的Map和Reduce操作
- 排错感悟
- 教师判分如何“高抬贵手”?
- 反向索引(Inverted Index)
- 数据库设计注意事项
- 使用_oleCalendar类添加日历到窗口中
- AJAX设计策略(七)
- 经济扫盲:万亿外汇储备是债务,不要想着“怎么花”
- 木马编写--屏幕控制之BMP转JPG