【问题标题】:How to add items to an array one by one in groovy language如何用groovy语言将项目一一添加到数组中
【发布时间】:2013-06-21 22:30:38
【问题描述】:

我正在开发一个 grails 应用程序,并且我已经有一个域类“ExtendedUser”,其中包含有关用户的信息,例如:“name”、“bio”、“birthDate”。现在我打算对用户的年龄进行统计,所以我创建了另一个控制器“StatisticsController”,想法是将所有出生日期存储在本地数组中,这样我就可以用它管理多个计算

class StatisticsController {
//    @Secured(["ROLE_COMPANY"])
    def teststat(){
        def user = ExtendedUser.findAll()   //A list with all of the users
        def emptyList = []    //AN empty list to store all the birthdates
        def k = 0
        while (k<=user.size()){
            emptyList.add(user[k].birthDate) //Add a new birthdate to the emptyList (The Error)
            k++
        }
        [age: user]
    }
}

当我测试时,它向我显示此错误消息:Cannot get property 'birthDate' on null object 所以我的问题是如何将所有生日存储在一个数组或列表中,以便我可以用它进行计算。谢谢

【问题讨论】:

  • 所有这些替代解决方案都有效,但是您收到错误的原因是您让 k 在等于 user.size() 时通过循环,并且此时 user[k]不在列表的末尾。如果 user.size() == 3,则存在 user[0]、user[1] 和 user[2],但不存在 user[3]。将 k

标签: arrays list grails groovy controller


【解决方案1】:

我更喜欢 .each() 尽可能在 groovy 中。阅读 groovy 循环 here

为此尝试类似:

user.each() {
    emptylist.push(it.birthdate) //'it' is the name of the default iterator created by the .each()
}

我没有在这台计算机上设置 grails 环境,所以没有经过测试就在我的脑海中浮现,但试一试。

【讨论】:

  • 那么“推”应该做什么?
  • Push 将值添加到数组中。我强烈建议您至少简要阅读文档,了解您要使用的数据类型。 Groovy list doc
  • 谢谢,这似乎工作得很好,只是我已经看过文档了。和 IDK 为什么说“推”返回布尔值。比你再次
  • 我在其中添加了.birthdate,这可能更符合您的要求。至于 push,如果它成功添加了一个值到列表中,它返回 true,因此你可以将它与控制语句一起使用,如 while(list.push(x)) {},它将循环直到它没有值添加到列表中。
  • 在您的示例中,空列表可以这样定义:emptylist = []
【解决方案2】:

我会使用这种方法:

def birthDates = ExtendedUser.findAll().collect { it.birthDate }

collect 方法转换集合的每个元素并返回转换后的集合。在这种情况下,用户被转换成他们的出生日期。

【讨论】:

    【解决方案3】:

    你可以试试:

    List dates = ExtendedUser.findAll().birthDate
    

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 2018-10-18
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多