sorting - Go: Sort array, dropping elements if error caught in `Less(i, j int)` -
निम्न struct
प्रकार बिंदु संरचना {datetimeRecorded को देखते हुए Time.Time} // रिटर्न सच है अगर बिंदु तुलना बिंदु से पहले दर्ज किया गया था। // यदि दिनांक समय उपलब्ध नहीं है, तो वापसी झूठी और त्रुटि फ़ंक्शन (p1 प्वाइंट) रिकॉर्ड किया गया है (पी 2 पॉइंट) (बीनियर बूल, गलती त्रुटि) {if (p1.datetimeRecorded.IsZero ()) || (P2.datetimeRecorded.IsZero ()) {अं = ErrNoDatetime} else {isBefore = p1.datetimeRecorded.Before (p2.datetimeRecorded)} वापसी}
<कोड मैं क्रमबद्ध करना चाहते हैं > [] बिंदु द्वारा datetimeRecorded
विशेषता
मैं निम्नलिखित (जो काम करता है):
प्रकार ByDatetimeRecorded [] प्वाइंट समारोह (एक ByDatetimeRecorded) लेन () पूर्णांक {वापसी लेन (क)} समारोह (क ByDatetimeRecorded) स्वैप (i, j पूर्णांक) {एक [i], एक [जे] = एक [जे], एक [i]} समारोह (एक ByDatetimeRecorded) कम (i, j पूर्णांक) bool {स्वैप, _: = एक [I] .कॉर्पोरेटेड / कोड> पकड़ा जाएगा और अंक बदले नहीं होंगे (रिटर्न false
)। क्या यह त्रुटि को पकड़ना और इसे सरणी से छोड़ना संभव है? की तरह कुछ:
समारोह (एक ByDatetimeRecorded) कम (i, j पूर्णांक) bool {स्वैप, अरे: = एक [i] .RecordedBefore (एक [जे]) यदि अं = शून्य { // निकालें तत्व यहां है} वापसी स्वैप}
1 संपादित करें
मुझे इस बात के बारे में अधिक विशिष्ट होना पड़ सकता है कि क्या तत्व ड्रॉप करने के लिए अधिक अर्थपूर्ण हो सकता है:
समारोह (एक ByDatetimeRecorded) कम (i, j पूर्णांक) bool {एक [मैं] .datetimeRecorded.IsZero () {ड्रॉप // एक [i]} अगर एक [जे] .datetimeRecorded.IsZero () स्वैप {एक [जे] ड्रॉप //} _: = एक [i] .RecordedBefore (एक [जे]) वापसी स्वैप}
मानक सॉर्ट पैकेज टुकड़ों से तत्वों को नहीं छोड़ देगा। सॉर्टिंग से पहले स्लाइस के शून्य मान को फ़िल्टर करें।
i: = 0 for _, p: = श्रेणी अंक {if! P.datetimeRecorded.IsZero () {points [i] = p I ++}} अंक = अंक [: i] सॉर्ट। सर (ByDatetimeRecorded (points))
Comments
Post a Comment