Jawaban:
Ini adalah metode termudah / terpendek yang dapat saya temukan.
Swift 3 dan Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Swift 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Beberapa info lebih lanjut:
Ini menggunakan metode pengurangan Array (dokumentasi di sini ), yang memungkinkan Anda untuk "mengurangi koleksi elemen ke nilai tunggal dengan secara rekursif menerapkan penutupan yang disediakan". Kami memberikan 0 sebagai nilai awal, dan kemudian, pada dasarnya, penutupan { $0 + $1 }. Tentu saja, kita dapat menyederhanakannya menjadi satu tanda plus, karena itulah cara Swift menggulung.
combine. Seharusnya multiples.reduce(0, combine: +).
flatMapdi atasnya terlebih dahulu untuk meratakannya ke array dimensi tunggal. multiArray.flatMap{$0}.reduce(0, combine: +)
Cepat 3+ satu liner untuk menjumlahkan properti objek
var totalSum = scaleData.map({$0.points}).reduce(0, +)
Di mana poin adalah properti di scaleData objek kustom saya yang saya coba kurangi
Swift3 telah berubah menjadi:
let multiples = [...]
sum = multiples.reduce(0, +)
Dalam Swift 4 Anda juga dapat membatasi elemen urutan ke protokol Numerik untuk mengembalikan jumlah semua elemen dalam urutan sebagai berikut
extension Sequence where Element: Numeric {
/// Returns the sum of all elements in the collection
func sum() -> Element { return reduce(0, +) }
}
edit / perbarui:
Xcode 10.2 • Swift 5 atau lebih baru
Kita bisa membatasi elemen urutan ke protokol AdditiveArithmetic baru untuk mengembalikan jumlah semua elemen dalam koleksi
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element {
return reduce(.zero, +)
}
}
Xcode 11 • Swift 5.1 atau yang lebih baru
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
Ini juga berfungsi:
let arr = [1,2,3,4,5,6,7,8,9,10]
var sumedArr = arr.reduce(0, combine: {$0 + $1})
print(sumedArr)
Hasilnya adalah: 55
Cepat 3
Jika Anda memiliki larik objek umum dan Anda ingin menjumlahkan beberapa properti objek, maka:
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
Meskipun bentuknya lebih pendek, sering kali Anda lebih suka siklus klasik:
let array = [A(value: 2), A(value: 4)]
var sum = 0
array.forEach({ sum += $0.value})
// or
for element in array {
sum += element.value
}
Bagaimana dengan cara sederhana
for (var i = 0; i < n; i++) {
sum = sum + Int(multiples[i])!
}
// di mana n = jumlah elemen dalam array
var sum = 0 ; for n in multiples { sum += n }meskipun saya akan menggunakan mengurangi.
Solusi yang mungkin: tentukan operator awalan untuk itu. Seperti operator pengurangan "+ /" seperti pada APL (mis. GNU APL)
Sedikit pendekatan yang berbeda di sini.
Menggunakan protokol dan tipe generik memungkinkan kita untuk menggunakan operator ini pada tipe array Double, Float dan 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
}
}
gunakan seperti ini:
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
(diperbarui untuk Swift 2.2, diuji dalam Xcode Versi 7.3)
Swift 3.0
saya punya masalah yang sama, saya temukan di dokumentasi Apple solusi ini.
let numbers = [1, 2, 3, 4]
let addTwo: (Int, Int) -> Int = { x, y in x + y }
let numberSum = numbers.reduce(0, addTwo)
// 'numberSum' == 10
Tapi, dalam kasus saya, saya punya daftar objek, maka saya perlu mengubah nilai daftar saya:
let numberSum = self.list.map({$0.number_here}).reduce(0, { x, y in x + y })
ini bekerja untuk saya.
@IBOutlet var valueSource: [MultipleIntBoundSource]!
private var allFieldsCount: Int {
var sum = 0
valueSource.forEach { sum += $0.count }
return sum
}
menggunakan ini untuk parameter bersarang
Sederhana saja ...
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)")
Keluaran:
Jumlah elemen saya adalah: 37
Bagi saya, ini seperti menggunakan properti
let blueKills = match.blueTeam.participants.reduce(0, { (result, participant) -> Int in
result + participant.kills
})
Cepat 3
Dari semua opsi yang ditampilkan di sini, inilah yang bekerja untuk saya.
let arr = [6,1,2,3,4,10,11]
var sumedArr = arr.reduce(0, { ($0 + $1)})
print(sumedArr)
Untuk jumlah elemen dalam array Objek
self.rankDataModelArray.flatMap{$0.count}.reduce(0, +)
ini pendekatan saya tentang ini. namun saya percaya bahwa solusi terbaik adalah jawaban dari nama pengguna pengguna 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}