Swift 🌰🌰:
let list = ["-90", "-90", "-90", "-88", "-88",
"-88", "-88", "-88", "-60", "-60",
"-60", "-60", "-60", "-60", "-90",
"-90", "-90", "-90", "-89", "-89",
"-89", "-89", "-89", "-89", "-89",
"-89", "-60", "-91", "-91", "-91"];
let value = list.map { CGFloat(Float($0)!) }.expectationValue
//2021-04-15 19:40:03.777000+0800 NSArray+Helper.swift.expectationValue[line 65]: 数组:[-90.0, -90.0, -90.0, -88.0, -88.0, -88.0, -88.0, -88.0, -60.0, -60.0, -60.0, -60.0, -60.0, -60.0, -90.0, -90.0, -90.0, -90.0, -89.0, -89.0, -89.0, -89.0, -89.0, -89.0, -89.0, -89.0, -60.0, -91.0, -91.0, -91.0]
//各元素出现次数: [-60.0: 7, -90.0: 7, -91.0: 3, -88.0: 5, -89.0: 8]
//各元素出现概率: [-89.0: 0.21291866028708134, -88.0: 0.21052631578947367, -90.0: 0.215311004784689, -60.0: 0.14354066985645933, -91.0: 0.21770334928229665]
//总和: -418.0
//期望值是: -85.27751196172248
OC 🌰🌰:
NSArray *list = @[@"90", @"90", @"90", @"88", @"88",
@"88", @"88", @"88", @"60", @"60",
@"60", @"60", @"60", @"60", @"90",
@"90", @"90", @"90", @"89", @"89",
@"89", @"89", @"89", @"89", @"89",
@"89", @"60", @"91", @"91", @"91"];
[self expectationValue:list];
//2021-04-15 19:40:03.733000+0800 NSArray+Helper.swift.expectationValue[line 65]: 数组:[90.0, 90.0, 90.0, 88.0, 88.0, 88.0, 88.0, 88.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 90.0, 90.0, 90.0, 90.0, 89.0, 89.0, 89.0, 89.0, 89.0, 89.0, 89.0, 89.0, 60.0, 91.0, 91.0, 91.0]
//各元素出现次数: [90.0: 7, 60.0: 7, 91.0: 3, 89.0: 8, 88.0: 5]
//各元素出现概率: [90.0: 0.215311004784689, 60.0: 0.14354066985645933, 89.0: 0.21291866028708134, 88.0: 0.21052631578947367, 91.0: 0.21770334928229665]
//总和: 418.0
//期望值是: 85.27751196172248
public extension Array where Element == CGFloat{
///获取数组期望值
var expectationValue: CGFloat {
var dic = [CGFloat : Int]()
let set = Set(self)
for value in set {
let filterArray = self.filter { $0 == value }
dic[value] = filterArray.count
}
// DDLog(dic)
let sum = dic.keys.map { $0 }.reduce(0, +)
// DDLog(sum)
var percentDic = [CGFloat: CGFloat]()
set.forEach { (obj) in
percentDic[obj] = CGFloat(obj/sum)
}
// DDLog(percentDic)
var expectation: CGFloat = 0.0
percentDic.forEach { (key: CGFloat, value: CGFloat) in
expectation += key * value
}
DDLog("数组:\(self)\n各元素出现次数: \(dic)\n各元素出现概率: \(percentDic)\n总和: \(sum)\n期望值是: \(expectation)")
return expectation
}
}
@objc public extension NSArray{
///获取数组期望值
var expectationValue: CGFloat {
if self.count == 0 {
return 0.0
}
if let list = self as? [NSNumber] {
let array = list.map({ CGFloat($0.floatValue) })
return array.expectationValue
}
if let list = self as? [NSString] {
let array = list.map({ CGFloat($0.floatValue) })
return array.expectationValue
}
return 0.0
}
}
网友评论