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;