উত্তর:
এটি আমি খুঁজে পেতে পারি সবচেয়ে সহজ / সংক্ষিপ্ততম পদ্ধতি।
সুইফট 3 এবং সুইফট 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
সুইফট 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
আরও কিছু তথ্য:
এটি অ্যারের হ্রাস পদ্ধতিটি ( এখানে ডকুমেন্টেশন ) ব্যবহার করে, যা আপনাকে "সরবরাহিত বন্ধকে পুনরাবৃত্তভাবে প্রয়োগ করে উপাদানগুলির সংগ্রহকে একক মানকে কমিয়ে আনতে" দেয়। আমরা এটা প্রাথমিক মান হিসাবে 0 দিতে, এবং তারপর, মূলত, অবসান { $0 + $1 }
। অবশ্যই, আমরা এটিকে একটি একক প্লাস চিহ্নকে সহজ করতে পারি, কারণ এটিই সুইফট রোলস।
combine
। হওয়া উচিত multiples.reduce(0, combine: +)
।
flatMap
এটি একক মাত্রার অ্যারে সমতল করার জন্য প্রথমে এটি ব্যবহার করার চেষ্টা করুন । multiArray.flatMap{$0}.reduce(0, combine: +)
অবজেক্টের বৈশিষ্ট্যগুলি যোগ করতে 3+ একটি লাইনার স্যুইফ্ট
var totalSum = scaleData.map({$0.points}).reduce(0, +)
যেখানে পয়েন্টগুলি হল আমার কাস্টম অবজেক্ট স্কেলের ডেটা যা আমি হ্রাস করার চেষ্টা করছি
সুইফট 3 এ পরিবর্তিত হয়েছে:
let multiples = [...]
sum = multiples.reduce(0, +)
ইন সুইফট 4 এছাড়াও আপনি ক্রম উপাদান সীমাবদ্ধ করতে পারেন সাংখ্যিক হিসাবে অনুসরণ ক্রমানুসারে সব উপাদান এর সমষ্টি ফিরে যাওয়ার প্রোটোকল
extension Sequence where Element: Numeric {
/// Returns the sum of all elements in the collection
func sum() -> Element { return reduce(0, +) }
}
সম্পাদনা / আপডেট:
এক্সকোড 10.2 • সুইফট 5 বা তারপরে
সংগ্রহের সমস্ত উপাদানগুলির যোগফল ফিরিয়ে দিতে আমরা কেবল নতুন অ্যাডিটিভ আর্থিক প্রোটোকলটিতে ক্রম উপাদানগুলিকে সীমাবদ্ধ করতে পারি
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element {
return reduce(.zero, +)
}
}
এক্সকোড 11 • 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
এটিও কাজ করে:
let arr = [1,2,3,4,5,6,7,8,9,10]
var sumedArr = arr.reduce(0, combine: {$0 + $1})
print(sumedArr)
ফলাফল হবে: 55
সুইফট 3
আপনার যদি জেনেরিক অবজেক্টের একটি অ্যারে থাকে এবং আপনি কিছু অবজেক্ট প্রোপার্টি যোগ করতে চান তবে:
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
সংক্ষিপ্ত ফর্ম সত্ত্বেও, অনেক সময় আপনি ক্লাসিকের জন্য ক্লাসিকটি পছন্দ করতে পারেন:
let array = [A(value: 2), A(value: 4)]
var sum = 0
array.forEach({ sum += $0.value})
// or
for element in array {
sum += element.value
}
কিভাবে সহজ উপায় সম্পর্কে
for (var i = 0; i < n; i++) {
sum = sum + Int(multiples[i])!
}
// যেখানে এন = অ্যারের উপাদানগুলির সংখ্যা
var sum = 0 ; for n in multiples { sum += n }
যদিও আমি হ্রাস ব্যবহার করব।
একটি সম্ভাব্য সমাধান: এটির জন্য একটি উপসর্গ অপারেটর নির্ধারণ করুন। এপিএলের মতো হ্রাস "+ /" অপারেটরের মতো (যেমন জিএনইউ এপিএল)
এখানে একটি ভিন্ন পদ্ধতির একটি বিট।
প্রোটোকল এন জেনেরিক প্রকারের সাহায্যে আমাদের এই অপারেটরটি ডাবল, ফ্লোট এবং ইন্ট অ্যারে টাইপগুলিতে ব্যবহার করতে দেয়
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
}
}
যেমন ব্যবহার করুন:
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
(এক্সকোড সংস্করণ 7.3 এ পরীক্ষিত সুইফট ২.২-এর জন্য আপডেট হয়েছে)
সুইফট 3.0
আমার একই সমস্যা ছিল, আমি এই সমাধানটি ডকুমেন্টেশনটিতে পেয়েছি Apple
let numbers = [1, 2, 3, 4]
let addTwo: (Int, Int) -> Int = { x, y in x + y }
let numberSum = numbers.reduce(0, addTwo)
// 'numberSum' == 10
তবে, আমার ক্ষেত্রে আমার অবজেক্টের একটি তালিকা ছিল, তারপরে আমার আমার তালিকার আমার মানটি পরিবর্তন করতে হবে:
let numberSum = self.list.map({$0.number_here}).reduce(0, { x, y in x + y })
আমার জন্য এই কাজ।
@IBOutlet var valueSource: [MultipleIntBoundSource]!
private var allFieldsCount: Int {
var sum = 0
valueSource.forEach { sum += $0.count }
return sum
}
নেস্টেড প্যারামিটারগুলির জন্য এটি ব্যবহার করুন
সহজবোধ্য রাখো...
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)")
আউটপুট:
আমার উপাদানগুলির যোগফল: 37
আমার জন্য, সম্পত্তি ব্যবহার করে এটি এমন ছিল
let blueKills = match.blueTeam.participants.reduce(0, { (result, participant) -> Int in
result + participant.kills
})
সুইফট 3
এখানে প্রদর্শিত সমস্ত অপশন থেকে, এটি আমার জন্য কাজ করেছে।
let arr = [6,1,2,3,4,10,11]
var sumedArr = arr.reduce(0, { ($0 + $1)})
print(sumedArr)
অবজেক্টের অ্যারেতে উপাদানের যোগফলের জন্য
self.rankDataModelArray.flatMap{$0.count}.reduce(0, +)
এটি এই সম্পর্কে আমার পদ্ধতির। তবে আমি বিশ্বাস করি যে সবচেয়ে ভাল সমাধানটি ইউজারনেম টিবিডি- র উত্তর
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}