【问题标题】:In Swift, how to sum values from an array在 Swift 中,如何对数组中的值求和
【发布时间】:2020-12-08 19:44:31
【问题描述】:

这是我的代码:

import Foundation

struct Movie {
    var title = ""
    var year = 0
    var isImportant: Bool
    var isFinished: Bool
    
    init(title: String, year: Int, isImportant: Bool, isFinished: Bool) {
        self.title = title
        self.year = year
        self.isImportant = isImportant
        self.isFinished = isFinished
    }

    static let list1 = [
        Movie(title: "The Shawshank Redemption", year: 1994, isImportant: false, isFinished: false),
        Movie(title: "The Godfather", year: 1972, isImportant: false, isFinished: false),
        Movie(title: "The Dark Knight", year: 2008, isImportant: false, isFinished: false),
        Movie(title: "The Godfather: Part II", year: 1974, isImportant: false, isFinished: false),
        Movie(title: "Avengers: Infinity War", year: 2018, isImportant: false, isFinished: false),
        Movie(title: "Schindler's List", year: 1993, isImportant: false, isFinished: false)
        ]
    
    static let list2 = [
        Movie(title: "The Lord of the Rings: The Fellowship of the Ring", year: 2001, isImportant: false, isFinished: false),
        Movie(title: "Inception", year: 2010, isImportant: false, isFinished: false),
        Movie(title: "Forrest Gump", year: 1994, isImportant: false, isFinished: false),
        Movie(title: "Fight Club", year: 1999, isImportant: false, isFinished: false)
        ]
    
    static let list3 = [list1, list2]
    
    static let nomsDesRepas: [String] = ["Petit Déjeuner", "Collation 11h"]
}


var list2Dim = Movie.list3
var list1 = Movie.list1

我必须对“list1”字典中的年份求和,而不是直接从“list1”中求和。我需要通过“list2dim”字典。 我的意思是 (1994+1972+ ... +1993)

【问题讨论】:

  • 你有什么办法解决这个问题?从以前的问题中,您知道如何索引列表和映射集合,这些不是库中唯一的功能......当然还有循环......顺便说一句,“总和”似乎不寻常(1994 + 1972 + ...),你是这个意思吗?编辑您的问题(不要尝试将其放在 cmets 中)以显示您尝试过的内容以及您的问题所在,并且毫无疑问有人会帮助您。 HTH
  • 是的,我的意思是(1994+1972+ ... +1993)
  • 好的,总结了这些年。根据您从之前的问题中学到的知识,您尝试了什么,出了什么问题?和以前一样编辑您的问题。
  • 其实我在二维字典里找不到元素的地址,因为我是初学者
  • 是的,我的意思是一个数组数组。我不知道如何在其中导航!你能帮我吗?

标签: arrays struct sum swift5


【解决方案1】:

我不知道如何在其中导航!你能帮帮我吗?

无论数组中有什么,包括其他数组,索引都是相同的,因此“导航”它只是重复索引。你知道如何从你的问题中索引Access a value in a 2D array through programming in Swift

在操场上尝试以下操作并确保您理解每个输出行:

let list1 = [1, 2]
let list2 = [3, 4, 5]
let list3 = [6]

let listlist1 = [list1, list2]
let listlist2 = [list3]

let listlistlist = [listlist1, listlist2]

// print what we have produced
print(listlistlist)

// "navigate" into the structure, one step at a time
let result1 = listlistlist[0]
print(result1)
let result2 = result1[1]
print(result2)
let result3 = result2[2]
print(result3)

// indexing is left-associative, navigate in one step
let result012 = listlistlist[0][1][2]
print(result012)

如果您不确定 Operator associativity 读取的 left-associative 是什么。

在上面的示例中,最终结果是一个数字,来自您之前的@​​987654323@,如果最终结果是您知道可以访问其属性的对象。

在回答您的问题Multiply one dictionary by another in Swift 时,您学习了如何使用map 通过对现有数组的每个元素应用函数来生成新数组。

如果库中存在像map 这样按照某种模式处理整个数组的函数,库中可能没有其他函数也按照其他模式处理整个数组吗?所以去找map 的文档,然后通读文档的那个区域,看看你发现了什么——你可能不会失望,离你的年份值求和的目标更近了一步。

如果您在旅程的中途遇到困难,请提出一个新问题,包括您在此之前设计的代码,描述您遇到的错误或您无法弄清楚的步骤,并包含一个返回链接回答这个问题,以便读者可以通过您的问答阅读线索。毫无疑问,有人会帮助您进行下一步。

继续学习、阅读和做事!高温

【讨论】:

    【解决方案2】:

    我终于找到了我的问题的答案:

    struct Movie {
        var title = ""
        var year = 0
        var isImportant: Bool
        var isFinished: Bool
        
        init(title: String, year: Int, isImportant: Bool, isFinished: Bool) {
            self.title = title
            self.year = year
            self.isImportant = isImportant
            self.isFinished = isFinished
        }
    
        static let list1 = [
            Movie(title: "The Shawshank Redemption", year: 1994, isImportant: false, isFinished: false),
            Movie(title: "The Godfather", year: 1972, isImportant: false, isFinished: false),
            Movie(title: "The Dark Knight", year: 2008, isImportant: false, isFinished: false),
            Movie(title: "The Godfather: Part II", year: 1974, isImportant: false, isFinished: false),
            Movie(title: "Avengers: Infinity War", year: 2018, isImportant: false, isFinished: false),
            Movie(title: "Schindler's List", year: 1993, isImportant: false, isFinished: false)
            ]
        
        static let list2 = [
            Movie(title: "The Lord of the Rings: The Fellowship of the Ring", year: 2001, isImportant: false, isFinished: false),
            Movie(title: "Inception", year: 2010, isImportant: false, isFinished: false),
            Movie(title: "Forrest Gump", year: 1994, isImportant: false, isFinished: false),
            Movie(title: "Fight Club", year: 1999, isImportant: false, isFinished: false)
            ]
        
        static let list3 = [list1, list2]
        
        static let nomsDesRepas: [String] = ["Petit Déjeuner", "Collation 11h"]
    }
    
    var list2Dim = Movie.list3
    
    func sumSectionCalorie(Liste liste: Int) -> Int {
    var total = 0
    let number = list2Dim[liste].count
        for xxx in 0 ..< number {
        
            total += list2Dim[liste][xxx].year
    }
        return total
    }
    
    let total = sumSectionCalorie(Liste: 0)
    print(total)
    
    

    感谢 CRD 给我提示。

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2018-09-27
      • 2022-11-18
      • 2022-07-20
      • 2020-01-16
      相关资源
      最近更新 更多