GeneXus笔记本——关于GeneXus中一种键值对数组的使用

摘要:
如标题所示,GeneXus中版本号为16.0.136889.Net的Gx16U6环境的KeyValue组合类似于HashMap,这是一个键值对。参考资料如下:PropertiesDataType(XEvolution 3)

  如题 ,环境Gx16U6 版本号16.0.136889  .Net  在 GeneXus中的 Key Value组合类似于HashMap这种键值对参考资料如下Properties Data Type (X Evolution 3) | Article (genexus.com)首先新建一个变量 类型为Properties  然后创建Key值和Value值 使用Set方法进行填充 如下图

GeneXus笔记本——关于GeneXus中一种键值对数组的使用第1张

然后 查看Log日志如下

GeneXus笔记本——关于GeneXus中一种键值对数组的使用第2张

 使用此属性是因为项目中有一个需求报表统计一年中各材料的使用数量,举例如下

1月份 苹果/6个、西瓜/3个、李子/2个、桃子/9个、哈密瓜/7个、枣/15个、荔枝/18个、火龙果/32个  ----看起来数据正常是吧

2月份 月饼/1个、银行卡/4张、桃子/10箱、卫生纸/12卷、桃子/5斤、板烧鸡腿堡/1个、猫咪玩偶/2个 ----稀奇古怪的东西加了进来, 桃子 一会个/一会箱

3月份 发夹/6个、?/3个、柚子x哈密瓜/2麻袋、猪肉/2两、牛/7头、纸巾/15箱(20包/箱)、洗衣粉/18支、洗衣液/2瓶   ----你已经完全不知道会有些什么东西了

………………………………大概就是同种东西不同规格,还有可能混在一起但是知道以何种方式混合比如 柚子x哈密瓜/2麻袋 可以看作各一麻袋 一麻袋=20个

总而言之 ,当时为了实现此统计报表使用了多层嵌套for each循环数据, 先For each出所有的excel文件中类型即 苹果,西瓜,发夹,银行卡...然后无条件(无脑)塞到一个数据集(SDT集合)里面去,然后新建立一个报表集(SDT集合),在循环数据集的过程中挨个放到统计集中去,理论上是可行的,但是这样做的缺点是我没法直接操作统计集进行数据的更改,只能循环统计集后找到这个元素才能对他进行操作,举例如下:

数据集 内容                                        

苹果(个) :16

苹果x梨子(麻袋):2

苹果/(箱):3

====================================

开始循环

For 数据集

  For 统计集

     if  统计集中不存在此元素   //比如不存在苹果/个

      add 新统计集元素 并且设置初始数量

     else  //存在同样的元素 进行数量累加

     统计集数量 = 初始数量+数据集新数量  //进行累加

     endif

  EndFor

End

=================================================

当数据量很大的时候会很费时间,这已经是我极致简化了,中间还有很多查询操作,在数据集和统计集数量相同的情况下,时间复杂度为O(n²),因为当时项目赶需求所以搁置了,后续知道了这个key,value的用法后,改写了此方法,循环一次即可,写法如下所示

=================================================

创建key.value键值对数组 hashmap

For 数据集

  if  hashmap.get(key) = 数据集新元素   //能找到表示已存在 这里的key可以是”苹果/个“或者 "苹果/箱"

    //通过Get方法获取它的value值进行累加

  else  //没有找到相关元素 属于新元素

    //通过Set方式 进行新元素的追加

  endif

EndFor

=================================================

改完后确实效率提升了不少,快了很多原先可能要10多秒,改完后只有2-3秒左右。

 PS:发现这个居然一直没发布 今天更新了一下 去年4月的草稿拖到现在

免责声明:文章转载自《GeneXus笔记本——关于GeneXus中一种键值对数组的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇原码、反码、补码、移码之间的关系和转换Hibernate-入门教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux内核Radix Tree(一)

一、概述 Linux radix树最广泛的用途是用于内存管理,结构address_space通过radix树跟踪绑定到地址映射上的核心页,该radix树允许内存管理代码快速查找标识为dirty或writeback的页。Linux radix树的API函数在lib/radix-tree.c中实现。 Linux基数树(radix tree)是将指针与long整...

Xcode7中你一定要知道的炸裂调试神技

Xcode7中苹果为我们增加了两个重要的debug相关功能。了解之后觉得非常实用,介绍给大家。 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误。苹果这次带来了革命性的提升。 在项目的Scheme中Dia...

把APE、WAV、FLAC等高清格式转换成苹果Apple Lossless或者其它格式

Apple的iPod系列对常见的无损格式都不支持——这不能不说是一个很大的遗憾。当然,这里面也必然有Apple想主推自己研发的Apple Lossless格式(后文仅称ALAC)的原因。但时至今日,可转换ALAC的转换软件依然少之又少。今天又去搜索了下这方面的资料,竟然被我找到了一个很好用的音乐转换工具。它基本上可以把所有的音频格式转换成Apple Los...

Android 添加键值并上报从驱动到上层

转载:https://blog.csdn.net/weixin_43854010/article/details/94390803 Android 添加键值并上报从驱动到上层 平台 :RK3288 OS:Android7.1 kernel部分添加键值: 1.在dts中(kernel/arch/arm/boot/dts/rk3288-android.dtsi...

移动端常见的不同苹果手机media query汇总

在做手机网站的时候,我经常用百分比布局,但是经常在不同的手机显示的不同 比如说,一样的东西,在iphone4(s)、5(s)、6、plus中都会有不同显示 有时候也想有为了某个手机单独的做一些效果,来满足不同客户的要求 这时候,最方便的,我觉得应该是css3的 media query 而不是用javascript来判断 吼吼。。。真是方便极了!! 下面的,...

苹果cms系统 更新后台数据 报(error) READONLY You can't write against a read only slave 的解决办法

苹果cms系统 更新后台数据 报(error) READONLY You can't write against a read only slave  的解决办法 最近发现使用苹果cms系统搭建的网站,后台更新数据突然出现如下错误提示 (error) READONLY You can't write against a read only slave 后来...