如何挑出数组的某几行(非所有)数值进行比较,将较小的数据直接移到数组最后隐藏?



  • 比如说我有一个关于汤料的数组如图:第一列是buff名称,第二轮是流逝时间,第三列是持续时间,第四列是炖汤里待加上buff的时间,第五列是目前剩余时间,第六列是加上炖汤buff后剩余时间: 微信图片_20200609165035.png 运行机制是往这个汤里加东西,汤就会产生相应的buff,buff持续时间是添加数量×100秒,图片根据buff类型显示,并按加上炖汤buff后剩余时间(第6列)降序排列(这块已经做好了)。微信图片_20200609164901.png 运行起来的问题是:会出现显示多个buff挤占吨位的情况:如图,实际上只需要显示一个蓝色的"延年益寿"buff,但是现在显示了3个,还挤掉了2个buff没有显示。 微信图片_20200609165108.png 目前想了一个方法,就是用max()语句挑选出“延年益寿+60/120/500/600/1200”这种buff中第6列数字最大的某行,其他延年益寿的buff直接移到数组最后并隐藏,但当我找数组教程的时候,没有把数组某行非最大值的几行移到最后的相关语句。是否是我找漏了?或者说有其他方法实现相同效果?求指教,谢谢!



  • 看得有点懵,你是指同类型buff中,选出第六列最大的那行保留,其余的同类型的行移动到数组最后?因为不知道你目前效果的具体实现方式,所以就仅按你的描述先来说一些需要注意的点吧: · 首先是,数组不存在直接移动某行到另一行的操作,如果要执行这个操作,就需要把需要移动的整行数据先用其他方式记录下来(例如字符型变量或另一个数组等),然后删掉这一行,再用“插入”或“添加”动作(可能还需要结合“依据xy设置值”)把刚刚记录好的数据以新的行重新设置回去,整个流程是相对比较繁琐的。 · 然后因为不太清楚你这种同类型buff的设计有多少,所以没法给出比较准确的建议,个人看法是,如果设计上是同类型buff只唯一显示一个“加上炖汤buff后剩余时间”最大的图标,那可以直接按这个先整体排序数组,然后显示的时候,做一个同类型buff是否已显示过的标记,并以此控制剩余的同类型buff不显示。 以你的截图为例,整体排序后,编号0、3、4行是“延年益寿”, 8b8b337c-6311-414c-aff7-a453858dc7ad-image.png 但目前只需要显示最靠前的那个,那就在写事件的时候,当第一个“延年益寿”显示过后,就把“延年益寿”标记为已显示,然后数组往下遍历的时候,再遍历到“延年益寿”相关的行,就不做显示处理了,跳过这一行继续往下遍历,这样显示出来的buff就都是唯一且“加上炖汤buff后剩余时间”最大的了。 · 最后就是关于如何标记的问题,我这里的推荐方式是,用一个字符串变量造一个“已显示buff列表”,也就是显示过的buff名称会加到这个列表里,然后判断的时候,用系统表达式find()来检测数组当前行的buff名是否在已显示列表中(find表达式会返回“目标文本”在“对比文本”中的位置,如果找不到,会返回-1,根据返回值是否等于-1就可以知道你设定的文本是否存在于“对比文本”中), (find表达式的官方说明:8ff7bf86-f5e6-46d4-b3f4-d23fed0fa554-image.png ) 如果结果是不存在,则生成buff图标并把该buff名称加入“已显示buff列表”中,表示已被显示;如果存在,就证明之前已经显示过了,直接不处理,数组继续往下运行遍历。

    大概就是这么个思路,就是不太清楚是不是你想要的效果。



  • 解决了,不过没有新建数组,也没有用find(留下了不会用find编程的泪水)。用了以下流程达到同样效果,目前唯一的缺点是点击加汤料后响应有点慢。 微信图片_20200611015355.png

    1、给原数组(6列)高度加1列,手动给“延年益寿+??”第7列赋值0,其他的第7列赋值1

    2、新增一个数值变量"最久寿命",与所有“延年益寿+??”的第6列进行判断最大值:"最久寿命"=A,A<B则"最久寿命"=B,再把B处第7列赋值1,再与C/D/E比较和赋值(语句很长,用到数组.at()和数组.indexof())微信图片_20200611015723.png

    3、先按照第6列降序,再按照第7列降序,最后显示buff的时候把第6列=0和第7列=0的都隐藏掉,如图(唯一可以截屏一屏的): 微信图片_20200611013810.png



  • @老阿姨炸碉堡 👍 顺利完成就好


登录后回复