【问题标题】:How to append an array in another array in Swift?如何在 Swift 中将一个数组追加到另一个数组中?
【发布时间】:2016-07-27 15:59:23
【问题描述】:

我有一个 JSON 响应,我必须解析它的答案。我使用for loop 将单个元素写入一个名为courseDataArray 的数组中。之后,我想将这个新创建的数组写入另一个名为combinedCourseArray 的数组,目的是将其传递给UITableView。创建第一个数组似乎工作正常。

但是如何创建另一个数组combinedCourseArray,其中包含所有courseDataArray 类型的数组?

for (index, element) in result.enumerate() {

            // get one entry from the result array
            if let courseEntry = result[index] as? [String:AnyObject]{

                //work with the content of the array
                let courseName = courseEntry["name"]
                let courseType = courseEntry["course_type"]
                let courseDate = courseEntry["cor_date"]
                let courseId = courseEntry["cor_id"]
                let duration = courseEntry["duration"]
                let schoolId = courseEntry["sco_id"]
                let status = courseEntry["status"]


                let courseDataArray = ["courseName" : courseName, "courseType": courseType, "courseDate": courseDate, "courseId": courseId, "duration": duration, "schoolId":schoolId, "status":status]

                print(courseDataArray)

                var combinedCourseArray: [String: AnyObject] = [:]
                combinedCourseArray[0] = courseDataArray //does not work -- error: cannot subscript a value of type...

               // self.shareData.courseStore.append(scooter)

            }

【问题讨论】:

  • combinedArray 应该是 [[String: AnyObject]] 类型,因为它是 Array<[String:AnyObject]>。使用var combinedCourseArray: [[String: AnyObject]] = [[:]]
  • [String: AnyObject] 是字典而不是数组
  • 谢谢。这就是问题所在。我必须添加?在 AnyObject: var combinedCourseArray: [[String: AnyObject?]] = [[:]] 之后
  • 顺便说一句,courseDataArray 实际上是 Dictionary 而不是 Array

标签: arrays swift multidimensional-array


【解决方案1】:

您应该将 combinedCourseArray 声明移到数组之外。它应该是var combinedCourseArray: [[String: AnyObject]] = [[:]],因为它是一个数组而不是字典。

你应该这样做

combinedCourseArray.append(courseDataArray)

而不是

combinedCourseArray[0] = courseDataArray

【讨论】:

  • 谢谢。工作正常。我不得不在这里添加问号: var combinedCourseArray: [[String: AnyObject?]] = [[:]]
【解决方案2】:
var FirstArray = [String]()
var SecondArray = [String:AnyObject]()

FirstArray.append(contentsOf: SecondArray.value(forKey: "key") as! [String])

【讨论】:

    【解决方案3】:

    首先在这个循环之外声明这个combinedCourseArray数组

    var combinedCourseArray: [[String: AnyObject]] = [[String: AnyObject]]()
    for (index, element) in result.enumerate() {
    
            // get one entry from the result array
            if let courseEntry = result[index] as? [String:AnyObject]{
    
                //work with the content of the array
                let courseName = courseEntry["name"]
                let courseType = courseEntry["course_type"]
                let courseDate = courseEntry["cor_date"]
                let courseId = courseEntry["cor_id"]
                let duration = courseEntry["duration"]
                let schoolId = courseEntry["sco_id"]
                let status = courseEntry["status"]
    
    
                let courseDataArray = ["courseName" : courseName, "courseType": courseType, "courseDate": courseDate, "courseId": courseId, "duration": duration, "schoolId":schoolId, "status":status]
    
                print(courseDataArray)
    
    
                combinedCourseArray.append(courseDataArray) //does not work -- error: cannot subscript a value of type...
    
               // self.shareData.courseStore.append(scooter)
    
            }
     }
    

    【讨论】:

    • 谢谢。工作正常。我不得不在这里添加问号: var combinedCourseArray: [[String: AnyObject?]] = [[:]]
    【解决方案4】:

    只需在外部数组上使用flatMap 将一个数组转换为另一个数组,可能会删除一些元素:

    let courseDataArray : [[String:AnyObject?]] = result.flatMap {
        guard let courseEntry = $0 as? [String:AnyObject] else {
            return nil
        }
    
        return [
            "courseName" : courseEntry["name"],
            "courseType": courseEntry["course_type"],
            "courseDate": courseEntry["cor_date"],
            "courseId": courseEntry["cor_id"],
            "duration": courseEntry["duration"],
            "schoolId": courseEntry["sco_id"],
            "status": courseEntry["status"]
        ]
    }
    

    当然,守卫并不是真正需要的,因为输入类型可能已经是[[String:AnyObject]],并且由于你不能有任何内部故障,你可以只使用map而不是flatMap

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2017-08-04
      • 1970-01-01
      • 2020-10-06
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2018-11-25
      相关资源
      最近更新 更多