![UiPath RPA开发:入门、实战与进阶](https://wfqqreader-1252317822.image.myqcloud.com/cover/221/39888221/b_39888221.jpg)
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中元素的数据类型。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-159.jpg?sign=1734442888-4WXQpd6BighiKgdYq8htTj4i0sXDJsTI-0-69e34555f5ef7639967f1c62c9f146cb)
图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所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-160.jpg?sign=1734442888-nmJEuZdK05zbWQ9N1pxuDEFTLYsFzumS-0-10289860e45b560d5a196532e51681ad)
图3-160 List型变量在Variables面板中的显示
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-161.jpg?sign=1734442888-PbhK9wLGIGvIWSxeA5fbMXfVg8HSYQVU-0-5bbe15486da1c6ee9885d479eb53befc)
图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位置添加一个元素。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-162.jpg?sign=1734442888-Ndy9mBmmfsoQXwNxQyNVU2VJxtF6RCV1-0-3cf192d299cafde25565851bc6e77b5a)
图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所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-163.jpg?sign=1734442888-SgLbNwAvKOeZUMJtBxMsJOJwCTwA2pu9-0-73ec11efd16e632af2b28fe335787888)
图3-163 新建流程
2)拖入一个Sequence活动到设计器面板。在Properties面板中,将Sequence活动的DisplayName属性更改为“某活动参与者管理”,如图3-164所示。
3)在Variables面板中创建List型变量ParticipantsList,用于存储某活动的参与者信息。默认的Variable type下拉列表中不含有List型,可以选择Browse for Types...选项,如图3-165所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-164.jpg?sign=1734442888-uHDlarbaCHYbF8x33KjKRSXCvtzbT07f-0-212bdca3c3d2d0613cba3e05c018e5d6)
图3-164 拖入Sequence活动并更改属性
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-165.jpg?sign=1734442888-fM4vcWB9fA2RXuIZ6taumYCfl0v2N05f-0-9ba678fe4cb8e65b1716cd5a45a885db)
图3-165 创建变量
4)系统随即会显示Browse and Select a .Net Type对话框,在Type Name字段中输入想要查找的变量类型关键字List,选择System.Collections.Generic.List<T>,此时窗口上方的下拉列表中为List中的元素选择String型后点击OK按钮,如图3-166所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-166.jpg?sign=1734442888-PsjYbgKxZE8IvForAdaK62FaNJEZT4Yw-0-b0416454ff8622a1db398b9751c5a937)
图3-166 更改变量类型为List类型
5)此时Variables面板中变量ParticipantsList的数据类型被更改为List型,如图3-167所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-167.jpg?sign=1734442888-ISuskXwXalYVuOIE9orTaQiAbkLTO874-0-1987748788957d121db47d19cf655db0)
图3-167 更改变量类型后的Variables面板
6)拖入一个Assign活动到“某活动参与者管理”活动中。在Properties面板中,将DisplayName属性更改为“存储现有参与者”,在To属性中输入ParticipantsList,在Value属性中输入new List(Of String) From {"张鑫","王强"},如图3-168所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-168.jpg?sign=1734442888-i5iOOpAoSX9yhMwBRdgFtrz2jC4ppYU7-0-5c7630fbdd5c1fa4efc19875c01f806a)
图3-168 存储现有参与者
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-169.jpg?sign=1734442888-sQVv6xV0uNYxuIp43poUv3YmOmKwylrk-0-e3d9b21bf8c88f9b4e2c926fea670184)
图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所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-170.jpg?sign=1734442888-ysPWDPM2DGHMo9PVNTCQ5YmnMpcYGamn-0-b50b69d1e1850f280f4e8eea65afbb5a)
图3-170 添加参与者信息
9)拖入一个Write Line活动到“某活动参与者管理”活动中。在Properties面板中,将DisplayName属性更改为“输出第一个和第三个参与者”,将Text属性更改为“ParticipantsList(0)+","+ParticipantsList(2)”,如图3-171所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-171.jpg?sign=1734442888-kV0jkACrwpkYWHqM9LOljaLRnU7SfzW7-0-dc3af1a02fbc7578ab6faf9ad8060742)
图3-171 输出第一个和第三个参与者
10)按F5键执行流程,将在Output面板中显示执行结果,如图3-172所示。
同样的,想要遍历List时也可以参照对Dictionary进行遍历的案例。在实际项目中,我们有时还会遇到需要对数据进行去重的情况,例如对员工打卡系统中每天多次打卡数据的去重,这时可以对集合中的数据进行遍历,然后利用Set的特性完成,如例3.18所示。
【例3.18】使用Set完成对员工打卡记录去重的流程。创建一个项目,将某员工的打卡记录("20210101", "20210102", "20210102", "20210103")存储在List型变量中,利用Set的特性对该员工的打卡记录进行去重,并在Output面板输出所有的打卡日期。流程图如图3-173所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-172.jpg?sign=1734442888-lGLu4QR7eYzoRcxAgyN5uhTObqBtoDYj-0-0eccbb1de079bdc093a91722dac29b6b)
图3-172 执行结果
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-173.jpg?sign=1734442888-qTnX8a8NWiwF0fgxGZJdXKHTnrw7Xijz-0-85c747e698ee06fdea41434e346e833d)
图3-173 流程图
具体实现步骤如下所示。
1)进入Studio界面,点击Process创建一个新流程,命名为3_18_RemoveListDuplication-BySet,如图3-174所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-174.jpg?sign=1734442888-xZRyII4Fb7yhaTQW6pOUlwQ5LA4U8FYM-0-57f93395f2d5ba805a2b97b6cb5fc832)
图3-174 新建流程
2)拖入一个Sequence活动到设计器面板。在Properties面板中,将Sequence活动的DisplayName属性更改为“打卡系统管理”,如图3-175所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-175.jpg?sign=1734442888-EWhVDXuzMDv8LRZCCghsP6S4taZDrRrL-0-f43f616e2e8b73b883f3b39188faed2d)
图3-175 拖入Sequence活动并更改属性
3)在Variables面板中创建List型变量WorkDateList,用于存储员工的打卡记录。默认的Variable type下拉列表中不含有List型,可以选择Browse for Types...选项,如图3-176所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-176.jpg?sign=1734442888-1sAm6reP42nc24pkogAZ5NpvyzaVW5HB-0-f7936d113b8b09cd1099bdb9610a61b0)
图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所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-177.jpg?sign=1734442888-BKDIxhO7z0sdeHNQ9rBQmK0ssYIbgXv1-0-38cd205b853ba8f88145c0c6ada81215)
图3-177 更改变量类型为List类型
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-178.jpg?sign=1734442888-KXT0kGAnOhh6bKoS01IoT7wh1yqu36bP-0-2a09a2967ae111edeb9b049e4271e391)
图3-178 更改变量类型后的Variables面板
5)拖入一个Assign活动到“打卡系统管理”活动中。在Properties面板中,将DisplayName属性更改为“存储员工打卡记录”,在To属性中输入WorkDateList,在Value属性中输入new List(Of String) From {"20210101","20210102","20210102","20210103"},如图3-179所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-179.jpg?sign=1734442888-F1YQNQl1ETlT2zO5kVeR4plF09Ws8LFQ-0-b8a060b359b6c902d2d9ee09d3998670)
图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所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-180.jpg?sign=1734442888-eo6tLKD9mx93kTsDXYm8FYCZXs8kClIQ-0-e08e3faf9ad546e683694d4cf740a715)
图3-180 拖入For Each活动并更改属性
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-181.jpg?sign=1734442888-H2PXTmTJUHxhAETLPa2MBXHedSitSIJe-0-e1eb435b42f404b3d9584f3b898421a5)
图3-181 创建HashSet型变量
8)系统随即会显示Browse and Select a .Net Type对话框,在Type Name字段中输入想要查找的变量类型关键字hashset,选择System.Collections.Generic.HashSet<T>,此时对话框上方的下拉列表中为HashSet中的元素选择String型后点击OK按钮,如图3-182所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-182.jpg?sign=1734442888-ewTWxpJQgs3ODGlrKiYNxfRvEEfkQMBZ-0-edf614761db19ad522a34303b2fce51c)
图3-182 选择HashSet型变量及HashSet中的元素类型
9)此时Variables面板中变量WorkDateList的数据类型被更改为List型,在Default字段中填写new HashSet(Of String)使变量WorkDateList实例化,如图3-183所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-183.jpg?sign=1734442888-fIEywElIJiD474hIslTJIKcRBt6nMpJ3-0-509641b8a14c2fcf36ed8d32caaf0804)
图3-183 HashSet型变量初始化
10)拖入一个Add To Collection活动到“将打卡记录去重”活动中。在Properties面板中,将DisplayName属性更改为“存储去重后的打卡记录”,在Collection属性中输入变量WorkDateSet,在Item属性中输入item,将TypeArgument更改为String,如图3-184所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-184.jpg?sign=1734442888-xpmCIDjdUoYemN5WwJf0Vugw3ln5u5hb-0-9572a1919475696b5aaa6efd034725eb)
图3-184 存储去重后的打卡记录
11)现在我们已经将去重后的打卡记录存入WorkDateSet中了,再拖入一个For Each活动到“打卡系统管理”活动中。在Properties面板中,将DisplayName属性更改为“遍历打卡日期”,将TypeArguments属性更改为String,在Values属性中输入变量WorkDateSet,如图3-185所示。
12)拖入一个Write Line活动到“遍历打卡日期”活动中。在Properties面板中,将DisplayName属性更改为“输出打卡日期”,将Text属性更改为item,如图3-186所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-185.jpg?sign=1734442888-r5AVsotQ8xDrw0lez7K8vo9cEzO1DNQu-0-f081c613178c9236fc193c4d1050fc70)
图3-185 遍历打卡日期
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-186.jpg?sign=1734442888-jPHxvI5yMIUyfr15SFv9yROB9Oz24nsP-0-16f2bdd8e5f975eaef4b6b7f306e09c9)
图3-186 输出打卡日期
13)按F5键执行流程,将在Output面板中显示执行结果,如图3-187所示。
![](https://epubservercos.yuewen.com/CF253F/20784355001359406/epubprivate/OEBPS/Images/3-187.jpg?sign=1734442888-BKlUZyvX69hlBJzoVhU1yKj8FFd7DDVV-0-42fc282cb9d695c7f476b094bfc5a26e)
图3-187 执行结果