今天同事问一个问题,如何将财务报表中的数据按照交易双方,放在一起显示,便于核对。例如一笔费用1万元,需要由A部门转嫁到B部门,此时表中存在2条数据,分别是转出和转入。其中1条数据来源和目的部门分别是 A,B,金额是10000,另外一条数据是 B,A,金额是-10000,财务希望这2条数据相邻显示,这样就便于核对。其中部门是定长的字符串,使用数字编码。
考虑了一下,其实这个本质上需要1个函数,f(a,b) 使其等于f(b,a),满足交换要求,随后将表中的数据按照这个f(a,b)来排序。先想到的是,可以利用数值加法来实现交换 a+b, 或者数值乘法a*b,计算出这个数值后,再按照这个来排序。 但加法可能会出现a+b=c+d的情况,使用乘法的话,相同的概率就低了很多。又想了一下,认为可以先将,a,b 来排序, 将小的字符串放在前面,再和大的字符串拼接,这样一来,就可以避免重合。
同事想了一下,认为采用字符排序之后拼接的方法好一些。 这个问题记录下来,也算是一个有趣的需求。