ios SKU 组合算法

2021-04-30  本文已影响0人  ios_暗夜行者

通俗来讲,一个SKU 就是商品在规格上的一种组合,比如说,一件衣服 有红色 M号的 也有蓝色 L号的 ,不同的组合就是不同的SKU

近段时间,刚好遇到要在商品详情页购买商品的时候,实现选择不同规格组合的sku,预判无库存sku选项置灰,减少客户不必要sku的选择。

网上搜寻了一大批有关sku选择算法的文章,然后被各路大神的一顿操作秀得一脸懵逼,简单来说就是没看懂。。。

当然基于以上参考得到的灵感,终于总结出来了一种简单易用通俗易懂的sku选择算法,思路简单,唯一的bug是sku数据有n多层的时候,计算量大耗内存。当然现在手机的运算能力都是杠杠的,正常来说商品的sku也不会有几十上百层那么夸张。

接下来我先捋一下思路吧!

Tips: sku 有三种状态,可选(正常),不可选(置灰),已选中(高亮),

一,sku算法初版:计算所有sku的组合 与 有库存sku的组合的交集,交集里面的sku为可选项,反之其他sku为不可选。

 1.计算所有sku的组合-->集合A

A = ["34,61,66"  , "34,61,67"  , ......]

2.计算有库存的sku的组合 -->集合B

一般是从后台服务器返回的 eg:

3. 计算集合A与集合B的交集,交集里面的所有元素就是初始时所有可选sku ID ,反之其他sku ID就是置灰(无库存不可选状态)

4.以上三步就是简易的sku算法核心思路,弹出规格框时,计算集合A和集合B的交集,得到初步赛选结果,告诉客户,哪些sku无库存不可选置灰显示,可选的为正常状态显示,减少客户做不必要的选择操作。

5.当然,细心的你很快就会发现这样的sku算法会导致无法判断出,已选sku的兄弟节点是否可选的bug。

二,优化兄弟节点的可选状态判断bug

1.如上图 已选Platform 属性的 34,长度属性的 62 , 我们要判断的已选sku兄弟节点属性分别是Platform 属性的 35,长度属性的 61。 

2.即:

要判断 长度属性的 61是否为可选,就要判断,34,61这样的组合是否属于有库存组合里面子集,是:可选,不是: 不可选。

同理:

要判断 Platform 属性的 35是否为可选,就要判断,35,62这样的组合是否属于有库存组合里面子集,是:可选,不是: 不可选。

3.细心的你肯定发现了规律,34,61 或者 35,62 这样的组合都有一个共同点

即:包含n个已选skuID,n = 已选sku个数-1 .

三,计算兄弟节点是否可选

1,计算已选sku ID 同类属性的组合 ==集合C  即:计算Platform 属性和长度属性的组合

集合C = ["34,61","34,62","35,61","35,61","35,62"]

2.计算已选skuID的子集 ==集合D 即:计算 [34,62]的子集 

集合D = ["34","62","34,62"]

3.从集合D里面筛选出,含有n个已选skuID的子集(n = 已选sku个数-1 )==集合E

集合E = ["34","62"]

4.最后计算可选兄弟节点组合,集合C里面的组合只要是含有集合E里面的元素都是可选兄弟节点组合

可选兄弟节点组合F = 【集合C里面的组合只要是含有集合E里面的元素】

5. 

兄弟节点可选skuID =  【(集合A与集合B的交集的skuID集合)再与 集合F 的并集 】

四,整理

1.筛选有库存的sku组合为可选sku 其余为不可选sku

2.计算兄弟节点可选sku

3.可选sku正常显示,不可选sku置灰,已选sku高亮

附Demo:sku算法demo

五,拓展一下

上一篇下一篇

猜你喜欢

热点阅读