party_bid_core是在已经做过party-bid和学过测试知识之后,再回头来思考party-bid的数据处理方式,这一次我们用到了三种数据结构。
第一种:
[{ name: "first activity", sign_ups: [], bids: [] }, { name: "second activity", sign_ups: [ { name:"仝键", phone:"13600000000" }, { name:"于硕", phone:"15600000000" }, { name:"吴京川", phone:"13800000000" } ], bids: [ { name:"竞价1", biddings : [ { name: "仝键", phone:"13600000000", price: "12" }, { name: "于硕", phone:"15600000000", price: "10" } ] }, { name:"竞价2", biddings : [ { name: "仝键", phone:"13600000000", price: "10" }, { name: "于硕", phone:"15600000000", price: "12" }, { name: "吴京川", phone:"13800000000", price: "10" } ] } ] }];
这一种数据结构中,嵌套还是比较多的,但是每一项数据都是嵌套在activities中,我们给activities三个属性:name,sign_ups,bids.在sign_ups中存储报名者的信息(name和phone),在bids中存储竞价信息,竞价信息包括:name和biddings属性,因为每一个竞价的活动都有一个名字和与其相关的竞价者发来的竞价内容,在biddings中就存储竞价者竞价的内容,包括:竞价者的名字name,竞价者的电话号码phone,以及竞价者的竞价price。
第二种数据结构:
{ "0":{ name: "first activity", sign_ups:[], bids:[], biddings:{} }, "1": { name: "second activity", sign_ups: [ { name:"仝键", phone:"13600000000" }, { name:"于硕", phone:"15600000000" }, { name:"吴京川", phone:"13800000000" } ], bids:["竞价1","竞价2"], biddings:{ "竞价1":[ { phone:"13600000000", price: "12" }, { phone:"15600000000", price: "10" } ], "竞价2": [ { phone:"13600000000", price: "10" }, { phone:"15600000000", price: "12" }, { phone:"13800000000", price: "10" } ] } } };
第二种数据结构感觉起来就比较聪明一些,给每一个活动加了一个链接,例如:activities["1"],就可以直接通过“1”来找到“1”对应的活动的信息,这样做的好处是不用遍历活动的所有信息来匹配我们要的某一个活动,只需要找到这个活动是不是“0”或者“1”对应的那个活动。另外不同于第一种数据结构的地方就是将biddings从bids中提了出来,不再嵌套在bids里面,虽然每开一次竞价,就要向两个数组中添加元素,但是在查询竞价信息时却是很方便的,我们可以通过遍历bids知道每一个活动下有哪一些竞价,通过遍历biddings知道每一个竞价下的竞价信息。
第三种数据结构:
activities = [ { id:"0", name: "first activity" }, { id:"1", name: "second activity" } ]; sign_ups = [ { name:"仝键", phone:"13600000000", activity_id:"0" }, { name:"于硕", phone:"15600000000", activity_id:"0" }, { name:"吴京川", phone:"13800000000", activity_id:"0" }, { name:"仝", phone:"13600000000", activity_id:"1" }, { name:"于", phone:"15600000000", activity_id:"1" }, { name:"吴", phone:"13800000000", activity_id:"1" } ]; bids = [ { name: "竞价1", activity_id:"0", biddings:[ { phone:"13600000000", price: "9" }, { phone:"15600000000", price: "10" } ] }, { name: "竞价1", activity_id:"1", biddings:[ { phone:"13600000000", price: "12" }, { phone:"15600000000", price: "10" } ] }, { name: "竞价2", activity_id:"1", biddings:[ { phone:"13600000000", price: "10" }, { phone:"15600000000", price: "12" }, { phone:"13800000000", price: "10" } ] } ];
第三种数据结构的嵌套是最少的,活动单独是一组数据,报名信息是一组数据,竞价信息又是一组数据。存储活动时,给每一项活动加一个id,方便报名和竞价时查找,sign_ups数组有三个属性:name,phone,activity_id,用户报名时,我们将用户的名字和电话号码匹配给正在进行报名的活动的id,此时,id就成为了连接活动和报名信息的key,通过活动对应的id,我们就可以轻松找到此id下所有报名者的信息。同样,每一个活动可以有不止一个竞价,每一次竞价开始,都会对应一个活动。所以,我们同样可以给bids添加activity_id这个属性,加上竞价本身的名字name,和此竞价下的竞价者信息。每一次竞价下都有多个竞价者信息,包括竞价者的电话号码phone和竞价价格price。所以第三种数据结构只用到了一个嵌套。
每一种数据结构都有其优势,第一种的逻辑非常清楚,每一个数据与其他数据之间的关系很容易就观察出来,但是实际操作的时候也是最麻烦的,因为涉及很多嵌套,所以需要遍历很多次,挨层找到符合条件的数组。第二种数据结构加了一个键值,并且将biddings提出与bids分隔开来,这样的好处是,在遍历数组时,我们同样可以快速得到我们想要的结果,但是我们必须通过一个属性值来匹配相关联的内容,比如biddings中name必须匹配bids中的竞价名称。第三种数据结构嵌套是最少的,这种做法损失了逻辑上的上下级关系,所以必须通过键值关联相关的内容,但是当我们使用数据时就不用逐层查找,比如我们要找到某一个竞价者的出价,只需要在bids中找到activity_id和name匹配的竞价,遍历此竞价,通过phone就能查到数据。
个人还是比较偏好通过第二种给每一项活动键值的方式,快速查找匹配的活动。另外,通过重写三种数据结构的方式,也让我对之前自己做的数据结构有了一个新的认识,同样的功能可以有很多种实现的方式,尝试不同的方式可以加深自己对项目的理解,找到最优的数据结构,不仅更好的实现功能,还可以减轻自己很多的工作量。而通过测试来实现代码,让我加深了测试的理解,利用测试的方式小步前进,可以清楚得知道自己每一步在干什么,整体上的思维也很清晰在测试中展现出来。
相关推荐
数据格式 uid_score_bid 如 dingdanglbh,4.0 ,25862578 Luna-cat,5.0 ,25862578 aiyung,5.0 ,25862578
标题中的"case9_bid.rar_PSO_PSO power_PSO 潮流_case9_pso power flow"揭示了这个压缩包文件包含的是一个关于电力系统潮流计算的案例,使用了粒子群优化(PSO, Particle Swarm Optimization)算法。PSO是一种基于...
CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于数据传输和存储中的错误检测技术。在本文中,我们将深入探讨CRC-16,特别是与CCITT标准相关的实现,以及它在Verilog硬件描述语言中的应用。 标题中的...
欧美1分钟历史数据,2003年5月到2019年2月,MT4EA回测好用。
C++是一种强大的、面向对象的编程语言,特别适合处理复杂的算法和数据结构。 1. **C++语言基础**: C++提供了丰富的特性,包括类、模板、异常处理、命名空间等。在这个项目中,我们可能会看到类的使用来封装数据和...
该招标项目前端设计源码采用JavaScript编写,包含280个文件,涵盖177个JavaScript文件、26个CSS文件、24个HTML文件、22个Java文件以及少量地图、JSON、图像、XML等文件。整个项目旨在打造一个功能完善、界面美观的...
"mc_bid"通常在IT行业中指的是“Multi-Channel Bid”,这是一种广告投放策略,特别是在数字营销领域,用于优化广告在多个渠道上的出价。这个概念主要应用于程序化广告(Programmatic Advertising),通过自动化的...
标题 "Repaso_Clases_Objetos_call_aplly_bid_22_02_2021" 暗示这是一个关于回顾类与对象、`call` 和 `apply` 方法以及可能涉及到的 JavaScript 语言特性的教程或复习资料。描述部分的信息较为简单,与标题相同,...
例如,`advertisement.cpp`可能涉及广告展示的优先级队列,`client.cpp`可能涉及到客户信息的散列表存储,`bidhistory.cpp`可能包含投标历史的链表或树结构,而`bid.cpp`可能涉及到投标出价的堆数据结构。...
bid0-lid64-steam.game_steamzc9_2.0.0.2702.exe.file
bid0-lid0-steam游戏管家_steambdth01_1.0.0.1487@1prw2r@gog.exe
在拍卖系统中,可能需要以下几种主要的数据结构: 1. **链表**:用于存储动态拍卖商品列表,因为新商品可能会随时添加或删除。 2. **队列**:可以用于处理用户的出价请求,确保按照时间顺序公平处理。 3. **栈**:...
去噪代码 matlab
在电子工程领域,VHDL是一种广泛使用的硬件描述语言,用于设计可编程逻辑器件(如FPGA或ASIC)的行为和结构。 双向移位寄存器是一种能够进行左移和右移操作的存储单元。它在数据处理、信号处理和通信系统中有着广泛...
总结起来,这个“backup_1000821v1001400000.zip”压缩包可能包含了一个陌陌应用或系统的备份数据,其中`verify.json`和`config.json`文件提供了备份验证和应用配置信息,而`verify.sign`和`verify.signature`则保证...
在IT领域,PDF(Portable Document Format)是一种广泛使用的文档格式,用于保存内容,确保在不同设备和操作系统上的一致显示。它通常包含文字、图像、表格等元素,并且可以进行安全保护,防止未经授权的编辑或复制...
### ECSHOP 数据结构、表结构与数据库设计详解 #### 概述 ECSHOP是一款基于PHP语言的开源网上商店系统,具有丰富的功能和良好的用户体验。本文将详细介绍ECSHOP v2.7.2版本中的数据结构、表结构以及数据库设计等...
在《数据结构课程设计总结报告》中,第一章详细阐述了需求分析。这一阶段的目标是理解系统规格说明,包括拍卖管理系统的功能和性能要求,如用户管理、拍卖物品分类、出价记录、时间管理等。同时,需求分析还需要与...
bid0-lid64-steam.game_steamzc_2.0.0.2242.exe
数据结构课程设计报告的核心是构建一个网上拍卖系统,该系统具备用户管理、拍卖信息发布、浏览、竞拍等功能,以及提供搜索和排序优化拍卖流程。在报告中,主要涉及到了以下几个关键知识点: 1. **需求分析**: ...