当前位置: 首页 > 知识库问答 >
问题:

在Swift数组中查找元素的总和

马沛
2023-03-14

在swift中查找整数数组和的最简单(最好)方法是什么?我有一个叫做multiples的数组,我想知道multiples的和。

共有3个答案

贺卜霸
2023-03-14

在Swift 4中,您还可以将序列元素约束为数字协议,以返回序列中所有元素的总和,如下所示

extension Sequence where Element: Numeric {
    /// Returns the sum of all elements in the collection
    func sum() -> Element { return reduce(0, +) }
}

编辑/更新:

Xcode 10.2•Swift 5或更高版本

我们可以简单地将序列元素约束到新的AdditiveArithmetic协议,以返回集合中所有元素的总和

extension Sequence where Element: AdditiveArithmetic {
    func sum() -> Element {
        return reduce(.zero, +)
    }
}

Xcode 11•Swift 5.1或更高版本

extension Sequence where Element: AdditiveArithmetic {
    func sum() -> Element { reduce(.zero, +) }
}
let numbers = [1,2,3]
numbers.sum()    // 6

let doubles = [1.5, 2.7, 3.0]
doubles.sum()    // 7.2

要对自定义对象的属性求和,我们可以扩展序列以获取谓词,以返回符合AdditiveArithmetic的值:

extension Sequence  {
    func sum<T: AdditiveArithmetic>(_ predicate: (Element) -> T) -> T { reduce(.zero) { $0 + predicate($1) } }
}

用法:

struct Product {
    let id: String
    let price: Decimal
}

let products: [Product] = [.init(id: "abc", price: 21.9),
                           .init(id: "xyz", price: 19.7),
                           .init(id: "jkl", price: 2.9)
]

products.sum(\.price)  // 44.5
寇夜洛
2023-03-14

Swift 3一行程序对对象的属性求和

var totalSum = scaleData.map({$0.points}).reduce(0, +)

其中点是我的自定义对象缩放中的属性我试图减少的数据

翟宾实
2023-03-14

这是我能找到的最简单/最短的方法。

Swift 3和Swift 4:

let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)

Swift 2:

let multiples = [...]
sum = multiples.reduce(0, combine: +)

更多信息:

这使用了Array的reduce方法(这里有文档),它允许您“通过递归应用提供的闭包将元素集合减少到单个值”。我们给它0作为初始值,然后,本质上,闭包{$0$1}。当然,我们可以将其简化为一个加号,因为这就是Swift滚动的方式。

 类似资料:
  • 问题内容: 快速找到整数数组总和的最简单(最佳)方法是什么?我有一个称为倍数的数组,我想知道倍数的总和。 问题答案: 这是我能找到的最简单/最短的方法。 Swift 3和Swift 4: 斯威夫特2: 更多信息: 这使用了Array的reduce方法(在此处提供文档),该方法允许您“通过递归应用所提供的闭包将元素的集合减少到单个值”。我们给它0作为初始值,然后本质上给闭包赋值。当然,我们可以将其简

  • 问题内容: 如何在数组中查找重复元素?我有一组电话号码,因此在电话号码中,我应该从右侧到左侧开始搜索,并找到相似的6个整数。那我应该把它们打印出来。 问题答案: 要查找重复项,可以按电话号码建立交叉引用,然后将其过滤为仅重复项。例如,考虑: 在Swift 4中,您可以使用以下命令构建交叉引用字典: 要么 然后,找到重复项: 显然,请使用对您有意义的任何模型类型,但是上面的模型使用以下类型: 有很多

  • 问题内容: 我有一个多维数组,我想获取围绕该数组中特定元素的元素。 例如,如果我有以下内容: 如何找到以上任何一个元素中的所有8个元素?以及如何处理边缘的元素? 我发现的一种方法是为此编写9行代码,这很明显,但是有更好的解决方案吗? 问题答案: for (i = 0; i < array.length; i ) { for (j = 0; j < array[i].length; j ) { fo

  • 问题内容: 我有一个看起来像这样的表: 还有其他几列与此问题无关。将它们存储为JSON是有原因的。 我要尝试的是查找具有特定 艺术家姓名 (精确匹配)的曲目。 我正在使用此查询: 例如 但是,这会进行全表扫描,而且速度不是很快。我尝试使用function创建一个GIN索引,并使用,但是未使用该索引,查询实际上要慢得多。 问题答案: 在Postgres 9.4+ 使用新的二进制JSON数据类型 ,P

  • 问题内容: 我有一个清单“ a” 我需要找到一个特定数字的所有元组。说1 我怎么做? 问题答案: 如果只希望第一个数字匹配,则可以这样操作: 如果您仅搜索其中包含1的元组: