arrays - আমার ফাংশনটি অ্যারে সুইফটের গড় গণনা করা




function swift (4)

আমি চাই আমার ফাংশনটি আমার ডাবল টাইপ অ্যারের গড় গণনা করে। অ্যারেটিকে "ভোট" বলা হয়। আপাতত আমার কাছে 10 নম্বর রয়েছে।

যখন আমি অ্যারে ভোটের গড় পেতে average function কল করি তখন এটি কার্যকর হয় না।

আমার কোডটি এখানে:

var votes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

func average(nums: Double...) -> Double {
    var total = 0.0
    for vote in votes {
        total += vote
    }
    let votesTotal = Double(votes.count)
    var average = total/votesTotal
    return average
}

average[votes]

গড় পেতে এখানে কীভাবে আমি কল করব?


সুইফট 4.2

নিখুঁত মার্জিত সরলতার জন্য, আমি ভালবাসি:

// 1. Calls #3
func average <T> (_ values: T...) -> T where T: FloatingPoint
{
    return sum(values) / T(values.count)
}

যখন আমরা এটি করছি, অন্যান্য দুর্দান্ত reduce ভিত্তিক অপারেশন:

// 2. Unnecessary, but I appreciate variadic params. Also calls #3.
func sum <T> (_ values: T...) -> T where T: FloatingPoint
{
    return sum(values)
}

// 3.
func sum <T> (_ values: [T]) -> T where T: FloatingPoint
{
    return values.reduce(0, +)
}

ক্রেডিট: অ্যাড্রিয়ান হুডার্টের MathKit , মূলত অপরিবর্তিত।

সুন্দর আপডেট:

আমি সুইফ্ট প্রোগ্রামিং ভাষাতে নিম্নলিখিতটি পেয়েছি:

নীচের উদাহরণটি কোনও দৈর্ঘ্যের সংখ্যার তালিকার জন্য পাটিগণিত গড় (গড় হিসাবেও পরিচিত) গণনা করে:

func arithmeticMean(_ numbers: Double...) -> Double {
   var total: Double = 0
   for number in numbers {
       total += number
   }
   return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// returns 3.0, which is the arithmetic mean of these five numbers
arithmeticMean(3, 8.25, 18.75)
// returns 10.0, which is the arithmetic mean of these three numbers

আপনার কোডে আপনার কিছু ভুল রয়েছে:

//You have to set the array-type to Double. Because otherwise Swift thinks that you need an Int-array
var votes:[Double] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

func average(nums: [Double]) -> Double {

    var total = 0.0
    //use the parameter-array instead of the global variable votes
    for vote in nums{
        total += Double(vote)
    }

    let votesTotal = Double(nums.count)
    var average = total/votesTotal
    return average
}

var theAverage = average(votes)

নিম্নলিখিত হিসাবে আপনার অ্যারে যোগ করতে আপনার হ্রাস () পদ্ধতিটি ব্যবহার করা উচিত:

এক্সকোড 11 • সুইফ্ট 5.1

extension Collection where Element: Numeric {
    /// Returns the total sum of all elements in the array
    var total: Element { return reduce(0, +) }
}

extension Collection where Element: BinaryInteger {
    /// Returns the average of all elements in the array
    var average: Double {
        return isEmpty ? 0 : Double(total) / Double(count)
    }
}

extension Collection where Element: BinaryFloatingPoint {
    /// Returns the average of all elements in the array
    var average: Element {
        return isEmpty ? 0 : total / Element(count)
    }
}
let votes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let votesTotal = votes.total        // 55
let votesAverage = votes.average    // "5.5"

যদি আপনাকে Decimal প্রকারের সাথে কাজ করতে হয় তবে মোট অঙ্কটি এটি ইতিমধ্যে সংখ্যার প্রোটোকল এক্সটেনশন সম্পত্তি দ্বারা আচ্ছাদিত রয়েছে, সুতরাং আপনার কেবলমাত্র গড় সম্পত্তি বাস্তবায়ন করতে হবে:

extension Collection where Element == Decimal {
    var average: Decimal {
        return isEmpty ? 0 : total / Decimal(count)
    }
}

প্রয়োজনে ফিল্টার সহ সহজ অ্যাভারেজ (সুইফট ৪.২):

let items: [Double] = [0,10,15]
func average(nums: [Double]) -> Double {
    let sum = nums.reduce((total: 0, elements: 0)) { (sum, item) -> (total: Double, elements: Double) in
        var result = sum
        if item > 0 { // example for filter
            result.total += item
            result.elements += 1
        }

        return result
    }

    return sum.elements > 0 ? sum.total / sum.elements : 0
}
let theAvarage = average(nums: items)




swift-playground