I am having a class like this:
class JobMembers {
var key: String?
let memberJob: String?
let memberName: String?
let memberID:String?
let normalPrice:Double?
var sumFreelanceRating:Double!
let priceJPerfScore:Double?
init(sumFreelanceRating:Double, normalPrice:Double, memberJob: String, memberName: String, priceJPerfScore:Double, memberID:String) {
self.sumFreelanceRating = sumFreelanceRating
self.normalPrice = normalPrice
self.memberName = memberName
self.memberJob = memberJob
self.priceJPerfScore = priceJPerfScore
self.memberID = memberID
}
var dictValue: [String: Any] {
return ["memberName" : memberName,
"memberJob" : memberJob,
"normalPrice": normalPrice,
"sumFreelanceRating" : sumFreelanceRating,
"priceJPerfScore": priceJPerfScore,
"memberID": memberID]
}
}
and initialise an Array and populate it for testing purposes like this:
var freelancerArray = [JobMembers]()
var member1JP = JobMembers(sumFreelanceRating: 35.6, normalPrice: 4.4, memberJob: "Tennis", memberName: "Aggazzi", priceJPerfScore: 2.2, memberID: "-FG84832iMV0Seznf-D" )
var member2JP = JobMembers(ajp: 2.3, crea: 3.4, ijr: 4.5, qpa: 5.6, coj: 6.7, los: 1.3, iracc: 2.4, dph: 4.8, sumFreelanceRating: 31.0, normalPrice: 6.84, memberJob: "Fussball", memberName: "Mueller", priceJPerfScore: 172.0, memberID: "-MA6VScOQiMV0Seznf-D")
var member3JP = JobMembers(sumFreelanceRating: 41.9, normalPrice: 5.5, memberJob: "Fussball", memberName: "Schweinsteiger", priceJPerfScore: 140.0, memberID: "-FF6666QiMV0Seznf-D")
var member4JP = JobMembers(sumFreelanceRating: 38.7, normalPrice: 3.3, memberJob: "Tennis", memberName: "Federer", priceJPerfScore: 170.0, memberID: "-FA874506QiMV0Seznf-D")
var member5JP = JobMembers(sumFreelanceRating: 36.7, normalPrice: 5.3, memberJob: "Tennis", memberName: "Becker", priceJPerfScore: 125.0, memberID: "-FE3454506QiMV0Seznf-D")
var member6JP = JobMembers(sumFreelanceRating: 32.5, normalPrice: 4.4, memberJob: "Tennis", memberName: "Williams", priceJPerfScore: 4.2, memberID: "-ADE3344506QiMV0Seznf-D")
var member7JP = JobMembers(sumFreelanceRating: 37.6, normalPrice: 2.8, memberJob: "Fussball", memberName: "Woods", priceJPerfScore: 5.8, memberID: "-GHI4564506QiMV0Seznf-D")
var member8JP = JobMembers(sumFreelanceRating: 36.6, normalPrice: 4.4, memberJob: "Golf", memberName: "Spieth", priceJPerfScore: 4.4, memberID: "-FGI4564506QiMV0Seznf-D")
var member9JP = JobMembers(sumFreelanceRating: 28.09, normalPrice: 2.8, memberJob: "Skate", memberName: "Dixon", priceJPerfScore: 2.8, memberID: "-4204564506QiMV0Seznf-D")
freelancerArray.append(member1JP)
freelancerArray.append(member2JP)
freelancerArray.append(member3JP)
freelancerArray.append(member4JP)
freelancerArray.append(member5JP)
freelancerArray.append(member6JP)
freelancerArray.append(member7JP)
freelancerArray.append(member8JP)
freelancerArray.append(member9JP)
I have another class which represents the users choice of how many membershe needs from a specific memberJob:
class JobAmount {
var key: String?
let jobName: String?
let jobAmount: Int?
init(jobName: String, jobAmount: Int) {
self.jobName = jobName
self.jobAmount = jobAmount
}
var dictValue: [String: Any] {
return ["jobName" : jobName,
"jobAmount" : jobAmount ]
}
}
For testing purposes I populated an array like this:
var jobsNeeded:[JobAmount] = []
var jobNeeded1 = JobAmount(jobName: Tennis, jobAmount:3)
var jobNeeded2 = JobAmount(jobName: Fussball, jobAmount2
What do I want to achieve with this?
The goal should be to fill an array which has the following requirements:
- For the required
jobAmountof the respectiveJobNames, add themembersin a new array which has the highest value ofsumFreelanceRatingfor the requiredJobName.
My approach so far
I tried different solutions from this forum, looked up the swift documentations etc. but couldn't find a proper solution that fits for me.
I am assuming that a good way to go is:
(1) sort the freelancerArraylike follow:
freelancerArray.sort(by: {$0.sumFreelanceRating > $1.sumFreelanceRating})
(2) Filter the freelancerArrayin a temporaryArraycontaining only the objects for the specific memberJob
(3) Append the number of needed values in a final Array (for i in 0..<jobName.jobAmount, something like JobRequirementArray, where all the memberswhich are needed get stored.
For Step 2 and 3 it must be obviously done for every memberJob the User needs.
Which and how many memberJobsit is going to be is unknown in advance.
Edit Pursued outcome:
let finalJobsneeded:[JobMembers]()
Then the array should contain following JobMembers:
finalJobsneeded = [member1JP, member3JP, member4JP, member5JP, member7JP]
As you can see, we need 5 Members in total, whereby 2 of them must contain the memberJob: Fussballand also have the highest value of sumFreelanceRating for all alternatives of memberJob: Fussball. The other 3 Members should contain the memberJob: Tennisand also have the highest value for all alternatives of memberJob: Tennis
I hope my explanation of my little Problem was clear enough and someone could help me bringing my ideas into actual code!
Thanks for your help everyone :)