Câu trả lời:
Đây là phương pháp dễ nhất / ngắn nhất tôi có thể tìm thấy.
Swift 3 và Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Swift 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Một số thông tin thêm:
Phương pháp này sử dụng phương thức rút gọn của Array (tài liệu ở đây ), cho phép bạn "giảm tập hợp các phần tử xuống một giá trị bằng cách áp dụng đệ quy bao đóng được cung cấp". Chúng tôi cho nó 0 làm giá trị ban đầu, và sau đó, về cơ bản, đóng { $0 + $1 }
. Tất nhiên, chúng ta có thể đơn giản hóa điều đó thành một dấu cộng duy nhất, vì đó là cách Swift cuộn.
combine
. Nên multiples.reduce(0, combine: +)
.
flatMap
trên nó trước để làm phẳng nó thành một mảng kích thước duy nhất. multiArray.flatMap{$0}.reduce(0, combine: +)
Swift 3+ một lớp lót để tính tổng các thuộc tính của các đối tượng
var totalSum = scaleData.map({$0.points}).reduce(0, +)
Trong đó điểm là thuộc tính trong thang đo đối tượng tùy chỉnh của tôi mà tôi đang cố gắng giảm
Swift3 đã đổi thành:
let multiples = [...]
sum = multiples.reduce(0, +)
Trong Swift 4 Bạn cũng có thể hạn chế các yếu tố tự để Numeric giao thức để trả lại tổng của tất cả các yếu tố trong chuỗi như sau
extension Sequence where Element: Numeric {
/// Returns the sum of all elements in the collection
func sum() -> Element { return reduce(0, +) }
}
chỉnh sửa / cập nhật:
Xcode 10.2 • Swift 5 trở lên
Chúng ta có thể chỉ cần giới hạn các phần tử chuỗi thành giao thức AdditiveArithatures mới để trả về tổng của tất cả các phần tử trong bộ sưu tập
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element {
return reduce(.zero, +)
}
}
Xcode 11 • Swift 5.1 trở lên
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
Điều này cũng hoạt động:
let arr = [1,2,3,4,5,6,7,8,9,10]
var sumedArr = arr.reduce(0, combine: {$0 + $1})
print(sumedArr)
Kết quả sẽ là: 55
Swift 3
Nếu bạn có một mảng các đối tượng chung và bạn muốn tính tổng một số thuộc tính đối tượng thì:
class A: NSObject {
var value = 0
init(value: Int) {
self.value = value
}
}
let array = [A(value: 2), A(value: 4)]
let sum = array.reduce(0, { $0 + $1.value })
// ^ ^
// $0=result $1=next A object
print(sum) // 6
Mặc dù hình thức ngắn hơn, nhiều lần bạn có thể thích chu kỳ cổ điển:
let array = [A(value: 2), A(value: 4)]
var sum = 0
array.forEach({ sum += $0.value})
// or
for element in array {
sum += element.value
}
Cách đơn giản
for (var i = 0; i < n; i++) {
sum = sum + Int(multiples[i])!
}
// trong đó n = số phần tử trong mảng
var sum = 0 ; for n in multiples { sum += n }
mặc dù tôi sẽ sử dụng giảm.
Một giải pháp có thể: xác định một toán tử tiền tố cho nó. Giống như toán tử giảm "+ /" như trong APL (ví dụ: GNU APL)
Một chút của một cách tiếp cận khác nhau ở đây.
Sử dụng một giao thức kiểu chung cho phép chúng ta sử dụng toán tử này trên các kiểu mảng Double, Float và Int
protocol Number
{
func +(l: Self, r: Self) -> Self
func -(l: Self, r: Self) -> Self
func >(l: Self, r: Self) -> Bool
func <(l: Self, r: Self) -> Bool
}
extension Double : Number {}
extension Float : Number {}
extension Int : Number {}
infix operator += {}
func += <T:Number> (inout left: T, right: T)
{
left = left + right
}
prefix operator +/ {}
prefix func +/ <T:Number>(ar:[T]?) -> T?
{
switch true
{
case ar == nil:
return nil
case ar!.isEmpty:
return nil
default:
var result = ar![0]
for n in 1..<ar!.count
{
result += ar![n]
}
return result
}
}
sử dụng như vậy:
let nmbrs = [ 12.4, 35.6, 456.65, 43.45 ]
let intarr = [1, 34, 23, 54, 56, -67, 0, 44]
+/nmbrs // 548.1
+/intarr // 145
(được cập nhật cho Swift 2.2, được thử nghiệm trong Xcode Phiên bản 7.3)
Swift 3.0
Tôi đã có cùng một vấn đề, tôi tìm thấy trên tài liệu Apple giải pháp này.
let numbers = [1, 2, 3, 4]
let addTwo: (Int, Int) -> Int = { x, y in x + y }
let numberSum = numbers.reduce(0, addTwo)
// 'numberSum' == 10
Nhưng, trong trường hợp của tôi, tôi đã có một danh sách các đối tượng, sau đó tôi cần chuyển đổi giá trị của danh sách của mình:
let numberSum = self.list.map({$0.number_here}).reduce(0, { x, y in x + y })
công việc này cho tôi
@IBOutlet var valueSource: [MultipleIntBoundSource]!
private var allFieldsCount: Int {
var sum = 0
valueSource.forEach { sum += $0.count }
return sum
}
đã sử dụng cái này cho các tham số lồng nhau
Giữ cho nó đơn giản ...
var array = [1, 2, 3, 4, 5, 6, 7, 9, 0]
var n = 0
for i in array {
n += i
}
print("My sum of elements is: \(n)")
Đầu ra:
Tổng các yếu tố của tôi là: 37
Đối với tôi, nó là như thế này bằng cách sử dụng tài sản
let blueKills = match.blueTeam.participants.reduce(0, { (result, participant) -> Int in
result + participant.kills
})
Swift 3
Từ tất cả các tùy chọn hiển thị ở đây, đây là tùy chọn phù hợp với tôi.
let arr = [6,1,2,3,4,10,11]
var sumedArr = arr.reduce(0, { ($0 + $1)})
print(sumedArr)
Để tính tổng các phần tử trong mảng Đối tượng
self.rankDataModelArray.flatMap{$0.count}.reduce(0, +)
đây là cách tiếp cận của tôi về điều này tuy nhiên tôi tin rằng giải pháp tốt nhất là câu trả lời từ tên người dùng tbd
var i = 0
var sum = 0
let example = 0
for elements in multiples{
i = i + 1
sum = multiples[ (i- 1)]
example = sum + example
}
let totalSum = self.cheques.reduce(0) { $0 + $1.amount}