3.2.9 List
列表(List)类型也是一种Object类型,用于在程序中存储一系列数据的集合,并且List允许增加和删除元素,更加灵活。List可通过Index(索引)访问,UiPath中也提供对List进行搜索、排序和操作的方法。当程序中需要保存同一系列的数据集合,并且还需要对数据进行增减时,都可用List类型,例如某活动的参与者名单等。
List类型不在Variables面板的Variable type下拉列表的默认选项中,它可以在Browse and Select a .Net Type对话框中的系统命名空间System.Collections.Generic下找到,如图3-159所示。List<T>中的T表示List中元素的数据类型。
图3-159 List类型示例
与Array一样,List中的元素可以是任何类型,如String型、Int32型、Double型及其他.Net中的数据类型。List的值也必须放在一对英文大括号中间,且每个值之间用逗号隔开,如{12,14,15}、{"张鑫",王强","李瑶"}等。
在需要取得List中某个元素的值或为某个元素赋值时,可以使用下标来实现,具体表现形式为List(Index)。List的下标是从0开始计算的,也就是说List中的第一个元素表示为List(0)。例如List型变量NumberList的值为{12,14,15},该List的第一个元素NumberList(0)的值为12,第二个元素NumberList(1)的值为14,第三个元素NumberList(2)的值为15。
List类型作为一种Object类型,与Dictionary类型一样,需要实例化之后才可以使用。它的构造函数形式为new List(Of Type) From {Value1,Value 2}。List型变量在Variables面板中的显示如图3-160所示。
图3-160 List型变量在Variables面板中的显示
图3-161 几种操作List的活动
List的长度指的是List中元素的个数,可以使用List.Count获取,表示List中有多少个相同类型的数据,如{1,2,3,4}.Count的结果为4。
UiPath提供了几种操作List的活动,位于活动面板System.Activities.Statements下,如图3-161所示。
它们的功能分别如下所示。
□Add To Collection:将指定的元素添加到List中。
□Clear Collection:从List中移除所有元素。
□Exists In Collection:判断指定元素在List中是否存在。
□Remove From Collection:从List中移除指定的元素。
除此之外,还可以使用一些.Net方法来对List进行操作,这些方法需要借助特定的活动来实现,例如Invoke Method和Invoke Code,这两种活动的详细使用方式请参照Dictionary章节的例3.14和例3.15。常用的List型相关方法有如下几种。
□List.Add(Item):在List中添加一个元素。
□List.Insert(Index,Item):在Index位置添加一个元素。
图3-162 流程图
□List.Contains(Item):确定指定的元素是否存在于该List中。
□List.Sort():为List里面的元素排序,默认是按升序排序。
□List.Remove(Item):在List中移除指定的元素。
□List.Clear():在List中移除所有元素。
【例3.17】使用List变量完成添加和打印某活动参与者信息的流程。创建一个项目,使用List存储某活动的现有参与者名单(张鑫、王强),在List中添加参与者李瑶,并在Output面板输出第一个和第三个参与者的名字。流程图如图3-162所示。
具体实现步骤如下所示。
1)进入Studio界面,点击Process创建一个新流程,命名为3_17_List,如图3-163所示。
图3-163 新建流程
2)拖入一个Sequence活动到设计器面板。在Properties面板中,将Sequence活动的DisplayName属性更改为“某活动参与者管理”,如图3-164所示。
3)在Variables面板中创建List型变量ParticipantsList,用于存储某活动的参与者信息。默认的Variable type下拉列表中不含有List型,可以选择Browse for Types...选项,如图3-165所示。
图3-164 拖入Sequence活动并更改属性
图3-165 创建变量
4)系统随即会显示Browse and Select a .Net Type对话框,在Type Name字段中输入想要查找的变量类型关键字List,选择System.Collections.Generic.List<T>,此时窗口上方的下拉列表中为List中的元素选择String型后点击OK按钮,如图3-166所示。
图3-166 更改变量类型为List类型
5)此时Variables面板中变量ParticipantsList的数据类型被更改为List型,如图3-167所示。
图3-167 更改变量类型后的Variables面板
6)拖入一个Assign活动到“某活动参与者管理”活动中。在Properties面板中,将DisplayName属性更改为“存储现有参与者”,在To属性中输入ParticipantsList,在Value属性中输入new List(Of String) From {"张鑫","王强"},如图3-168所示。
图3-168 存储现有参与者
图3-169 搜索Add To Collection活动
7)在Activities面板的搜索框内输入add to collection,如图3-169所示。
8)将Add To Collection活动拖入“某活动参与者管理”活动中。在Properties面板中,将DisplayName属性更改为“添加参与者信息”,在Collection属性中输入变量ParticipantsList,在Item属性中输入“"王瑶"”,将TypeArgument更改为String,如图3-170所示。
图3-170 添加参与者信息
9)拖入一个Write Line活动到“某活动参与者管理”活动中。在Properties面板中,将DisplayName属性更改为“输出第一个和第三个参与者”,将Text属性更改为“ParticipantsList(0)+","+ParticipantsList(2)”,如图3-171所示。
图3-171 输出第一个和第三个参与者
10)按F5键执行流程,将在Output面板中显示执行结果,如图3-172所示。
同样的,想要遍历List时也可以参照对Dictionary进行遍历的案例。在实际项目中,我们有时还会遇到需要对数据进行去重的情况,例如对员工打卡系统中每天多次打卡数据的去重,这时可以对集合中的数据进行遍历,然后利用Set的特性完成,如例3.18所示。
【例3.18】使用Set完成对员工打卡记录去重的流程。创建一个项目,将某员工的打卡记录("20210101", "20210102", "20210102", "20210103")存储在List型变量中,利用Set的特性对该员工的打卡记录进行去重,并在Output面板输出所有的打卡日期。流程图如图3-173所示。
图3-172 执行结果
图3-173 流程图
具体实现步骤如下所示。
1)进入Studio界面,点击Process创建一个新流程,命名为3_18_RemoveListDuplication-BySet,如图3-174所示。
图3-174 新建流程
2)拖入一个Sequence活动到设计器面板。在Properties面板中,将Sequence活动的DisplayName属性更改为“打卡系统管理”,如图3-175所示。
图3-175 拖入Sequence活动并更改属性
3)在Variables面板中创建List型变量WorkDateList,用于存储员工的打卡记录。默认的Variable type下拉列表中不含有List型,可以选择Browse for Types...选项,如图3-176所示。
图3-176 创建变量
4)系统随即会显示Browse and Select a .Net Type对话框,在Type Name字段中输入想要查找的变量类型关键字List,选择System.Collections.Generic.List<T>,此时对话框上方的下拉列表中为List中的元素选择String型后点击OK按钮,如图3-177所示。
此时Variables面板中变量WorkDateList的数据类型被更改为List型,如图3-178所示。
图3-177 更改变量类型为List类型
图3-178 更改变量类型后的Variables面板
5)拖入一个Assign活动到“打卡系统管理”活动中。在Properties面板中,将DisplayName属性更改为“存储员工打卡记录”,在To属性中输入WorkDateList,在Value属性中输入new List(Of String) From {"20210101","20210102","20210102","20210103"},如图3-179所示。
图3-179 存储员工打卡记录
6)拖入一个For Each活动到“打卡系统管理”活动中。在Properties面板中,将DisplayName属性更改为“将打卡记录去重”,将TypeArguments属性更改为String,在Values属性中输入变量WorkDateList,该活动会遍历WorkDateList中的所有元素,如图3-180所示。
7)在Variables面板中创建HashSet型变量WorkDateSet,用于对员工的打卡记录进行去重。默认的Variable type下拉列表中不含有HashSet型,可以选择Browse for Types...选项,如图3-181所示。
图3-180 拖入For Each活动并更改属性
图3-181 创建HashSet型变量
8)系统随即会显示Browse and Select a .Net Type对话框,在Type Name字段中输入想要查找的变量类型关键字hashset,选择System.Collections.Generic.HashSet<T>,此时对话框上方的下拉列表中为HashSet中的元素选择String型后点击OK按钮,如图3-182所示。
图3-182 选择HashSet型变量及HashSet中的元素类型
9)此时Variables面板中变量WorkDateList的数据类型被更改为List型,在Default字段中填写new HashSet(Of String)使变量WorkDateList实例化,如图3-183所示。
图3-183 HashSet型变量初始化
10)拖入一个Add To Collection活动到“将打卡记录去重”活动中。在Properties面板中,将DisplayName属性更改为“存储去重后的打卡记录”,在Collection属性中输入变量WorkDateSet,在Item属性中输入item,将TypeArgument更改为String,如图3-184所示。
图3-184 存储去重后的打卡记录
11)现在我们已经将去重后的打卡记录存入WorkDateSet中了,再拖入一个For Each活动到“打卡系统管理”活动中。在Properties面板中,将DisplayName属性更改为“遍历打卡日期”,将TypeArguments属性更改为String,在Values属性中输入变量WorkDateSet,如图3-185所示。
12)拖入一个Write Line活动到“遍历打卡日期”活动中。在Properties面板中,将DisplayName属性更改为“输出打卡日期”,将Text属性更改为item,如图3-186所示。
图3-185 遍历打卡日期
图3-186 输出打卡日期
13)按F5键执行流程,将在Output面板中显示执行结果,如图3-187所示。
图3-187 执行结果