我有一個二維數組,如下所示:與Javascript數組創建聯盟組合
let electionResultsData = [
["VVD", "vvd", 20.5, 2504948],
["PVDA", "pvda", 19.6, 2340750],
["PVV", "pvv", 15.4, 950263],
["CDA", "cda", 13.6, 801620],
["SP", "sp", 9.8, 909853],
["D66", "d66", 6.9, 757091],
["GL", "gl", 6.7, 219896],
["CU", "cu", 3.2, 294586],
["SGP", "sgp", 1.7, 196780],
["PVDD", "pvdd", 1.3, 182162],
["50PLUS", "50plus", 0.9, 177631],
["OVERIG", "overig", 0.2, 51463],
["PIRATEN", "piraten", 0.1, 30600],
["LP", "lp", 0.1, 3335],
["PVDM", "pvdm", 0.1, 3257],
["JEZUSLFT", "jezuslft", 0, 0],
["ONDRNMR", "ondrnmr", 0, 0],
["LOKAAL", "lokaal", 0, 0],
["ARTIKEL1", "artikel1", 0, 0],
["GEENPEIL", "geenpeil", 0, 0],
["VRIJP", "vrijp", 0, 0],
["BURGBEW", "burgbew", 0, 0],
["FVD", "fvd", 0, 0],
["VDP", "vdp", 0, 0],
["NIEUWEW", "nieuwew", 0, 0],
["DENK", "denk", 0, 0],
["STEMNL", "stemnl", 0, 0],
["VNL", "vnl", 0, 0]
]
每個陣列中的第一個值是一個政黨的大寫的名字,第二個值是小寫名稱,第三個值是投票的百分比,第四個值是投票數。僅供參考,這些是荷蘭政黨。
我現在要做的是制定一個計算可能的聯盟的系統。如果雙方在議會中獲得超過75個席位(至少76個席位),雙方之間的聯盟才能實現。我做了一個循環來遍歷與此代碼以上數組:
/**
* Form coalitions of not more than six parties that exceed 75 parliament seats
*/
formCoalitions(electionResultsData) {
let coalitions = [];
let maxNumberOfCoalitionParties = 6;
// Main loop to check all possible coalitions (28 parties * 28 = 784)
for (let i = 0; i < 784; i ++) {
let coalitionSeats = 0;
let partySeats = 0;
let coalitionParties = [];
let coalition = [];
// The inner loop to generate a combination/coalition
for (let i = 0; i < electionResultsData.length; i++) {
// Check if a coalition has formed yet
if (coalitionSeats < 76) {
partySeats = (150/100) * electionResultsData[i][2];
coalitionSeats += partySeats;
coalitionParties.push(electionResultsData[i][0]);
// If coalition has formed
if (coalitionSeats > 75) {
// Push data into a second dimension coalition array
coalition[0] = parseInt(coalitionSeats);
coalition[1] = coalitionParties;
// Check if the generated coalition array already exists
let coalitionsStringified = JSON.stringify(coalitions);
let coalitionStringified = JSON.stringify(coalition);
let coalitionExists = coalitionsStringified.indexOf(coalitionStringified);
if (coalitionExists === -1) {
coalitions.push(coalition);
}
}
}
}
}
// Loop through the coalitions (the charts will be drawn here)
for (let i = 0; i < coalitions.length; i++) {
console.log(coalitions[i]);
}
}
的問題是,此代碼僅生成一個可能的聯盟,而不是所有可能的聯盟。我需要以某種方式存儲已經生成的組合,並再次運行循環而不生成相同的聯盟。循環必須繼續這樣做,直到所有可能的不超過六方的聯盟產生。之後,循環可以停止。
解決此問題的最佳方法是什麼?
有一個[複雜的系統]的比特(https://en.wikipedia.org/wiki/Elections_in_the_Netherlands#Seat_assignment)來分發席位各方。你想納入這個?你似乎現在與分數席位一起工作。 –
這並不需要合併。我解釋的方式是我被告知如何製作它的方式(: –
)請不要重新發布您的問題,我們的社區經常認爲這是不好的現象,現在我們必須將您的帖子視爲重複,並且如果您想提請注意您的問題,請參閱[獲取關於未解答問題的注意事項?](https://meta.stackexchange.com/q/7046) –