首页 > 代码库 > 一个多选题设计引发的“血案”

一个多选题设计引发的“血案”

  我们在做某某调查问卷,试卷等类型的开发的时候,总会避免不了多选题。然而很多时候,一个多选题的设计,会引来不同的开发结果,这个因人而异。

以下是我对多选题的设计,提出的解决方法。

 

  我们在高中时代,想必大家对集合的概念都很熟悉吧。下面就来介绍集合是如何解决多选题统分的。

 

 有差集,不给分

 无交集,不给分(排除上一个后这个是考虑空白答卷的情况,如果确认不会有白卷这句可以不用)

 无差集,有交集,交集数量!=答卷,半分

 无差集,有交集,交集数量=答卷,满分(这个可以不写逻辑,直接用else也行,因为排除上面几种情况剩下就是交集相等)

 附上Linq差集、交集、并集的计算

List<string> ListA = new List<string>();List<string> ListB = new List<string>();List<string> ListResult = new List<string>();ListResult = ListA.Distinct().ToList();//去重ListResult = ListA.Except(ListB).ToList();//差集ListResult= ListA.Union(ListB).ToList();  //并集ListResult = ListA.Intersect(ListB).ToList();//交集

 

 (2)位运算

可以用位运算来计算

A:1 B:2 C:4 D:8

如何选择AB 则为3

如何选择ABCD 则为15

比如正确为4 则 看看选择的结果为N跟4比

if(N==4) 3分

if 4&N==N 2分
其他 0分

 

  位运算是不错的选择,很方便。可是位运算有个取值只能在2^64范围之中,想必超过64个选项的话,就不符合有些项目的实际需求了。

 

一个多选题设计引发的“血案”