1 --利用lua中的table是哈希表这一点进行计算
  2 function lua_distinct_union (union_t1,union_t2)
  3     if(union_t2==nil) then
  4         union_t2={};
  5     end;
  6     local result={};
  7     for k,v in pairs(union_t1) do
  8         result[v]=v;
  9     end;
 10     for k,v in pairs(union_t2) do
 11         if result[v] ==nil then
 12             result[v]=v;
 13         end;
 14     end;
 15     union_t1=nil;
 16     union_t2=nil;
 17     return result;
 18 end;
 19 
 20 function lua_distinct (distinct_t)
 21     local result={};
 22     for k,v in pairs(distinct_t) do
 23         if(result[v]==nil) then
 24         result[v]=v;
 25     end;
 26 end;
 27 distinct_t=nil;
 28 return result;
 29 end;
 30 
 31 function lua_distinct_diff(diff_t1,diff_t2) local result={};
 32     for k,v in pairs(diff_t1) do
 33         if(result[v]==nil) then
 34         result[v]=v;
 35     end;
 36 end;
 37 
 38 for k,v in pairs(diff_t2) do
 39     if(result[v]~=nil) then
 40     table.remove(result,v);
 41 end;
 42 end;
 43 diff_t1=nil;
 44 diff_t2=nil;
 45 return result;
 46 end;
 47 
 48 function lua_distinct_inter (inter_t1,inter_t2)
 49     if inter_t1==nil and inter_t2~=nil then
 50         return lua_distinct(inter_t2);
 51     end;
 52     if inter_t1~=nil and inter_t2==nil then
 53         return lua_distinct(inter_t1);
 54     end;
 55     local temp1={};
 56     local temp2={};
 57     local result={};
 58     local num1=0;
 59     local num2=0;
 60     for k,v in pairs(inter_t1) do
 61         if(temp1[v]==nil) then
 62             temp1[v]=v;
 63             num1=num1+1;
 64         end;
 65     end;
 66     for k,v in pairs(inter_t2) do
 67         if(temp2[v]==nil) then
 68             temp2[v]=v;
 69             num2=num2+1;
 70         end;
 71     end;
 72     inter_t1=nil;
 73     inter_t2=nil;
 74     if num1<num2 then
 75         for k,v in pairs(temp1) do
 76             if temp2[k]~=nil then
 77                 result[k]=temp1[k];
 78             end;
 79         end;
 80     else
 81         for k,v in pairs(temp2) do
 82             if temp2[k]~=nil then
 83                 result[k]=temp1[k];
 84             end;
 85         end;
 86     end;
 87     temp1=nil;
 88     temp2=nil;
 89     return result;
 90 end;
 91 
 92 
 93 function lua_distinct_union_multiply(tablesneedunion)
 94     if(tablesneedunion==nil or #(tablesneedunion)==0) then
 95         error('lua_distinct_diff_Multiply传入参数为空');
 96     end;
 97     local result=tablesneedunion[1];
 98     if #(tablesneedunion)==1 then
 99         return lua_distinct_union(result,nil);
100     end;
101     for i=2,#(tablesneedunion) do
102         local tmp=tablesneedunion[i];
103         result=lua_distinct_union(tmp,result);
104     end;
105     tablesneedunion=nil;
106     return result;
107 end;
108 
109 
110 
111 function lua_distinct_inter_multiply(tablesneedinter)
112     if(tablesneedinter==nil or #(tablesneedinter)==0) then
113     error('lua_distinct_inter_multiply传入参数为空');
114     end;
115     local result=tablesneedinter[1];
116     if #(tablesneedinter)==1 then
117         return lua_distinct_inter(result,nil);
118     end;
119     for i=2,#(tablesneedinter) do
120         local tmp=tablesneedinter[i];
121         result=lua_distinct_inter(tmp,result);
122         if  #(result)==0 then
123             break;
124         end;
125     end;
126     tablesneedinter=nil;
127     return result;
128 end;
129 
130 function getidsfromkeyvaluepair(keyvaluepair)
131     local result={};
132     if(keyvaluepair==nil) then
133         return result;
134     end;
135     local num=1;
136     for k,v in pairs(keyvaluepair) do
137         result[num]=v;
138         num=num+1;
139     end;
140     return result;
141 end;
142 
143 function lua_getfinalids(structs)
144     if #(structs)==1 then
145         return getidsfromkeyvaluepair(temptable);
146     end;
147     local temptable=structs[1].temptable;
148     for i=2,#(structs) do
149         local tmp2=structs[i].temptable;
150         if structs[i-1].flag==0 then
151             temptable=lua_distinct_union(temptable,tmp2);
152         else
153             temptable=lua_distinct_inter(temptable,tmp2);
154         end;
155     end;
156     return getidsfromkeyvaluepair(temptable);
157 end;
158 
159 
160 function lua_sortandtake(tableneedsort,takecount,isasc)
161     if isasc==true then 
162         table.sort(tableneedsort);
163     else 
164         table.sort(tableneedsort,function(a,b) return a>b end );
165     end;    
166     local result={};
167     for i=0 ,takecount do
168         result[i]=tableneedsort[i];    
169     end;
170     return result;
171 end;

 

posted on 2016-01-09 20:26  风灵ARCHER  阅读(412)  评论(0编辑  收藏  举报