從我前面回答的問題繼:Hiow獲得較低和較高的結果.filter枚舉值.MAP,(_:最大)應用
Why does map(_:) in Swift Playground return a String and not a tuple?
鑑於orders
陣列,一個球員有銷售
let orders = [2,3,5]
let goods = 1
注意一些goods
:數組不應該被訂購。
我想要應用一些相等規則並返回三個規則的索引和值元組;
(一)完美匹配
解決前面的問題
(b)如果數量較少規則有效
貨物的數量不等於任何訂單;
此外,他的商品數量少於最高訂單價值。後效果:僅返回最高順序值& &索引
在這個例子中,答案是
[2, 3, 5]
因爲產品= 1的陣列,並且是比任何訂單的下
同樣if goods = 4
那麼答案將是:[5]
當這個規則是真的;只返回最高的訂單價值。
目前我通過這樣做:
let lower = orders.filter({goods < $0})
print ("Lower: \(lower)")
// Output is Lower: [2, 3, 5]
或把它更準確,我用:
let lower = orders.filter({goods < $0}).max() ?? 0 as Int
// Output is 5
然而,這不會讓我知道這個規則爲真的orders
數組的索引。
(c)如果人數較多規則有效
球員有更多的商品比最高的訂單價值 訂單陣列中流露出
後的效果:僅返回最高的訂單價值& &索引
實施例:
If goods = 8
let higher = orders.filter({goods > $0 }).max() ?? 0 as Int
print ("Higher: \(higher)")
// Output is: 5
然而;這不會讓我知道這個規則爲真的orders
數組的索引。
問題>
如何通過上述過濾器(),其中的.max()被應用到給定的最低和更高數量的規則返回數組索引&數組值枚舉?
非常感謝
編輯:更新
現在我已經編入if語句;
// should only return the first result; regardless of how many results returned
let perfectMatch = orders.enumerated().filter({goods == $0.element}).flatMap({
[($0.offset, $0.element)]
}).first
if let perfectMatch = perfectMatch {
print ("Perfect Match: \(perfectMatch)")
}
else {
let lower = orders.enumerated().max(by: {goods < $1.element}).flatMap({
[($0.offset, $0.element)]
})
if let lower = lower {
print("Lower \(lower)")
}
else {
let higher = orders.enumerated().max(by: {goods > $1.element}).flatMap({[($0.offset, $0.element)]})
print("higher \(higher!)")
// if higher fails (unlikely), return a nil
}
}
的問題是,如果商品是比任何高/所有的數字,即:8
和訂單[1,1,1]
然後下邊界應該失敗/告吹,但它總是返回
Lower [(0, 1)]
您好,我會給這個去!非常感謝 – zardon
這似乎工作,但較低的一個返回多個結果;當它應該返回返回結果的max()。在這方面,我複製並倒置了你發佈的更高的過濾器算法,並且似乎工作;目前我正在測試各種結果。 – zardon
你好。當商品是8時,下邊界檢查應該返回零,但總是返回Lower [(0,1)],這是不正確的;換句話說 - 如果下邊界檢查無法爲其相等比較找到任何匹配,則下邊界檢查將失敗 – zardon