Skip to main content

使用集合

学习目标

完成本单元后,您将能够:

  • 声明并初始化列表。
  • 解释向列表添加项目的两种方法。
您知道您可以向专家学习吗?观看此视频,了解与本模块主题相关的更多信息:

集合

集合是一种变量类型,可以存储多个项目。在我们给出了煮茶的例子中,有一个糖罐,里面装了几块方糖。糖罐被视为一个集合,方糖则是存放在该集合中的物件。

标有集合标签的糖罐。糖罐中的方糖是集合中添加了标签的物件。

共有三种类型的 Apex 集合(列表、组和映射),但在本模块中,我们将重点讨论列表。  

列表

Apex 列表是一组相同类型的有序项目,就像购物清单一样。 

  1. 蜂蜜
  2. 牛奶

购物清单中的每件物品都是一个字符串,每件物品在清单中都有一个位置。您需要一些东西来申明一个列表。您将使用列表保留字、<> 字符中的数据类型(所有项目都必须是相同的数据类型)和保留字 new。在这个语句的末尾,必须有括号。 

List <String> groceries = new List <String>();

备注

备注

保留字是具有特殊含义的编程字,不可用作变量名称。如果您尝试为变量赋予 new、string、false、null 等名称,将会导致语法错误。

声明一个空列表

  1. 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)
  2. 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
    //Declare the groceries list
    List<String> groceries = new List<String>();
      
    //The output for this statement is an empty list, ().
    System.debug('Groceries Value: ' + groceries);
  3. 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
  4. 选择窗口底部的仅调试复选框。

当您运行代码时,您可能注意到了输出是 ()。因为您没有将任何内容添加到列表中,所以它是空的。当您申明 groceries(杂货)列表时,您创建了一个可以向其中添加项目的空白空间。 

名为“杂货”的一个大空槽。

声明已设置了大小的列表

如果我们确切地知道列表所需的长度,我们则可以在声明列表时设置大小。我们通过在数据类型之后的括号 [ ] 中添加大小来实现这一点,如下所示: 

String[] groceries = new String[4];

备注

备注

Apex 中提供了不同的方法来声明列表。此示例使用数组符号来设置列表大小。

这段代码声明了一个名为杂货的字符串列表,并将其大小设为 4 个字符串。空的杂货列表如下所示:

一个名为杂货的空间,分为四个槽。

项目的顺序位置是一个被称为索引的数字。索引是我们引用项目的方式。您可能已习惯了从数字一开始计数。然而,在许多编程语言中,是从零开始计数的!现在,当我们写 Apex 代码时,列表将是这样的。 

  1. 蜂蜜
  2. 牛奶

指向列表中某个项目的索引将为:“茶”的索引 0、“糖”的索引 1、“蜂蜜”的索引 2,依此类推。 

您通过列表中某个项目的索引(它在列表中的位置)引用该项目,如下所示:

groceries[0];

  1. 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)
  2. 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
    String[] groceries = new String[4];
    System.debug('Initialized groceries: ' + groceries);
      
    System.debug('Item 0: ' + groceries[0]);
  3. 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
  4. 选择窗口底部的仅调试复选框。

列表中第一个项目的值为 null。让我们在列表中添加一些项目。

初始化列表

初始化列表就是为列表分配初始值。向列表添加项目的方法共有两种。

  1. 声明并初始化列表。
    //Sets the first item in the list to 'Tea'
    List<String> groceries = new List<String>{'Tea'}; 
  2. 声明一个空列表,稍后添加值。
    List<String> groceries = new List<String>();
    groceries.add('Tea');

声明并初始化列表

用值初始化一个列表的语法类似于声明一个空列表。不同之处在于,您不使用圆括号 ( ( ) ),而是使用花括号 ( { } ) 来添加值。 

  1. 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)
  2. 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
    //Declare the groceries list
    List<String> groceries = new List<String>{'Tea','Sugar','Honey','Milk'};
      
    //The output for this statement is Tea, Sugar, Honey, Milk
    System.debug('Groceries: ' + groceries);
  3. 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
  4. 选择窗口底部的仅调试复选框。

声明一个空列表,稍后添加值

但是,如果稍后要添加项目,该怎么办?Apex 提供了使用列表的各种方法。让我们使用 add 方法将杂货物件添加到杂货列表中。

  1. 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)
  2. 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
    //Create the groceries list
    List<String> groceries = new List<String>();
      
    //The output for this statement is null
    System.debug('Groceries: ' + groceries);
      
    //Use the add method to add an element to the list
    groceries.add('Tea');
    groceries.add('Sugar');
    groceries.add('Honey');
    groceries.add(2, 'Milk');
      
    //The output for this statement is Tea, Sugar, Milk, Honey
    System.debug('Groceries: ' + groceries);
  3. 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
  4. 选择窗口底部的仅调试复选框。

一个名为杂货的空间,细分为四个槽,每个槽中放置一种原料:茶、糖、牛奶和蜂蜜。

您注意到 groceries(杂货)和 add 之间的点符号 (“.”) 了吗?Apex 使用点符号。点符号有多种用途。在第 8 行中,我们通过点符号将 add 方法(由 Apex 提供)连接到 groceries(杂货)列表,以将一个项目(茶)添加到列表中。

第 11 行演示了将项目添加至列表的另一种方法,具体做法是在特定索引(位置)处插入项目: 

groceries.add(2, ‘Milk’);

随着您继续使用 Apex 代码,您将学会如何确定使用哪种方法。但您在本单元学到的基础知识可以帮助您入门。 

揭开列表的面纱

采用不同的方法将项目添加到列表会产生略为不同的结果;有时还会产生意想不到的结果。做以下练习。

  1. 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)
  2. 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
    String[] groceries = new String[4];
    System.debug('Groceries: ' + groceries);
      
    groceries.add('Tea');
    groceries.add('Sugar');
    System.debug('Added 2 items: ' + groceries);
      
    groceries.add(1, 'Honey');
    System.debug('Added Honey in index 1: ' + groceries);
      
    System.debug('Item 0: ' + groceries[0]);
  3. 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
  4. 选择窗口底部的仅调试复选框。

有趣的结果:

四个调试日志事件。第 2 行显示初始化的杂货列表:(null, null, null, null)。第 6 行增加了 2 个项目:(null, null, null, null, Tea, Sugar)。第 9 行显示:在索引 1 中增加了 Honey: (null, Honey, null, null, null, Tea, Sugar)。第 11 行显示:Item 0: null.

当我们在第 4 行和第 5 行添加两个字符串时,我们并没有指定索引,所以 Tea 和 Sugar 被添加到列表的末尾,使列表大小从四个字符串增至六个字符串。在第 8 行中,我们为 Honey 明确指定了索引 1,但为什么 Honey 没有出现在列表的第一位呢?请记住,在编程时,我们总是从 0 而不是从 1 开始计数。在第 11 行中,列表中的第一个索引是 0,其当前包含一个 null(空)值。 

写代码和做数学题非常相似。您只有一个等式,但完成一件事的方法有很多种。在本单元中,您了解到在 Apex 中处理列表的方式不止一种。无论是要声明列表、初始化列表还是引用列表中的特定值,您都可以自行选择方法。选择太多了吗?不用担心。当您对 Apex 更加熟悉时,尝试采用不同的方式来完成任务,慢慢地您就会了解在特定情形下哪种方式最有效。

资源

在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈