跳到主要内容

中继器-番外篇

Axure 中继器提供了非常丰富的功能,但却没有现成的数据统计功能,没有办法像 Excel 表格那样,通过简单的公式就能够统计出我们所需要的数据,但这同样难不倒产品经理,本篇文章,带你了解怎么统计中继器的各种数据。

本文所有统计数据,需要先在 Axure 画布中添加一个中继器元件,中继器中只需要一个字段 num,并随机添加10行数据,其中至少有两个数是重复的。

为了方便预览时看到所有数值,在中继器内的矩形设置【载入时设置文本】的事件(你也可以在中继器的【每项加载】事件中设置,由于本文很多统计数据都是写在此事件中,所以我单独把与统计无关的事件挪到此处)。

接下来开始介绍各个数据如何统计。

求和

首先添加全局变量 sum,然后在中继器【每项加载】时,设置变量为【sum+Item.num】,最后把 sum 赋值给中继器下方的文本。

预览效果如下:

解释一下,中继器的【每项加载】是一个循环事件,有多少数据就会调用多少次,所以上述事件我们可以按如下图理解:

加载第1项时:sum=23

加载第二项:sum=sum+45=23+45=68

以此类推,每加载一项,都是将之前已加载的所有项目的总和加上当前项目的数值,最后一项加载结束后,刚好就是所有项目的总和。

平均数

平均数=项目总和/项目数量,项目总和我们刚刚已经能够求出来,而项目数量通过 Axure 内置的中继器函数 dataCount 可以直接就获得,这样要计算平均值就很简单了。

预览效果:

最大值

求最大值的思路是这样的,假设中继器中有3行,对应3个数,分别是:**
**

x = 1

y = 3

z = 2

现在需要求出他们之间的最大值,我们可以添加变量 max,首先将第一个数 x 赋值给 max,则有:max = 1。

接下来将 max 与其他两个数分别比较,如果 max 大于或等于比较的数,就什么都不做,如果 max 小于比较的数,就将该数赋值给 max,则有:

加载第1个数:max = 1

加载第2个数:max < y,max = 3

加载第3个数:max > z,max = 3(max 没有变化)

3轮结束之后,max 就获得了3个数中的最大值3。

在 Axure 中添加事件如下:

预览结果:

最小值

最小值的思路跟最大值是一样的,只要把逻辑反过来写就可以了:**
**

结果:

中位数

要找到中位数,首先得知道中位数的定义:将一组数据按照由小到大(或由大到小)的顺序排列,如果数据的个数是奇数,则称处于中间位置的数为这组数据的中位数;如果数据的个数是偶数,则称中间两个数据的平均数为这组数据的中位数。

从定义我们可以知道,总共有两种情况,就是数据的个数分别是奇数和偶数,找中位数实际上就是在找对应索引(index)的数据,以上两种情况对应的索引分别为:

奇数:(数据数量+1)/2

偶数:((数据总数/2)+((数据总数+2)/2))/2

偶数的公式看起来复杂,实际上就是取位于中间的两个数的平均值。

由于数据是杂乱无章的,所以中继器载入时,我们需要先对数据进行排序:

奇数的场景比较容易,首先添加全局变量 median 来保存中位数,接着事件设置如下:

其中【dataCount%2】表示求总数/2的余数,余数为0表示偶数,余数不为0表示奇数。

偶数就比较复杂了,我们需要额外用到另外两个变量 median_a 和 median_b 来分别保存中间的两个数值。

最后再求 median_a 和 median_b 的平均值就可以了,事件的条件就是当数据已经加载到最后一条并且 median_a 和 median_b 都不为空。

偶数行预览效果:

随意删掉一行,看看奇数行的效果:

统计数值出现次数

比如我们需要统计“23”总共出现多少次,我们可以添加全局变量 count,然后逐一判断每个值是否等于23,如果是,就给 count 加1,全部数据加载完成后,就可以得到23在所有数据中出现的次数:**
**

预览效果:

找到指定值的索引

比如我们想要找“23”所在的索引,找索引有3种情况:**
**

1、第一次出现的索引

2、最后一次出现的索引

3、所有出现过的索引

以上3个索引我们分别用变量 first_index、last_index、all_index 来记录。

这3个索引中,找最后一次出现的索引是最容易的,每项加载时,只要值等于“23”,就把对应索引赋值给 last_index,如果23在数据中出现多次,则会进行多次赋值,最后保存到的数值就是23最后一次出现的索引:

预览:

而要找第一次出现的索引,就要避免数据出现多次时重复赋值的情况,我们可以加一个判断,就是只有 first_index 不为空的时候,才给变量赋值,当23第一次出现时,变量为空,给变量赋值,当23第二次出现时,变量不为空,不赋值,所以最后只会保存到23第一次出现的索引:

预览:

最后找所有索引,跟求和的逻辑相似,但这次我们不是要求数据总和,而是要将每个索引值保存下来,给 all_index 循环赋值【[[all_index]][[Item.index]]、】,注意最后有个、用来分隔每个索引,显示的时候做了一个处理,截取掉最后一个字符“、”。

看看效果:

以上便是本文的全部内容,感谢阅读。