क्या किसी ऑब्जेक्ट के फ़ील्ड में फ़ंक्शन लागू करने का कोई बेहतर तरीका है और फिर परिणाम को एक नए टुकड़े में कॉपी करें? बेहतर से मेरा मतलब है कि लूप की तुलना में बेहतर प्रदर्शन करना।

var tmp []string
for _, value := range some_object.some_field {
    tmp = append(tmp, do_something(value))
}

कुछ इस तरह:

tmp := map_copy(do_something(some_object.some_field))

परिणामी टुकड़ा होने के साथ:

tmp[0] = do_something(some_object.some_value[0])
tmp[1] = do_something(some_object.some_value[1])
tmp[2] = do_something(some_object.some_value[2])
....
1
max 17 अप्रैल 2017, 18:04
map_copy सिर्फ एक फंक्शन होगा जिसमें आपके लूप के लिए होगा। मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं।
 – 
JimB
17 अप्रैल 2017, 18:07
मैं इसे खुद ही लिख सकता था। यह प्रदर्शन पहलू पर अधिक निर्देशित था। हो सकता है कि कुछ फैंसी आंतरिक हो, मुझे नहीं पता कि यह लूप से बेहतर कौन सा संभालता है। क्षमा करें अगर अस्पष्ट।
 – 
max
17 अप्रैल 2017, 18:09
इस विशिष्ट प्रश्न से पूरी तरह से संबंधित नहीं है, लेकिन विकी पर स्लाइस ट्रिक्स का एक समूह है जो कुछ सरल अनुकूलन को उजागर करता है, जैसे कि इलिप्सिस का उपयोग करके संलग्न करें। यहां पढ़ें github.com/golang/go/wiki/SliceTricks
 – 
RayfenWindspear
17 अप्रैल 2017, 20:00

1 उत्तर

सबसे बढ़िया उत्तर

केवल प्रदर्शन वृद्धि जो आप जोड़ सकते हैं वह है समय से पहले सही स्लाइस क्षमता आवंटित करना।

आप अभी भी 0 लंबाई के स्लाइस से शुरू करके एपेंड के साथ मान जोड़ सकते हैं:

tmp := make([]string, 0, len(some_object.some_field))
for _, value := range some_object.some_field {
    tmp = append(tmp, do_something(value))
}

या स्लाइस को सीधे अनुक्रमित करके:

tmp := make([]string, len(some_object.some_field))
for i := range some_object.some_field {
    tmp[i] = do_something(some_object.some_field[i])
}
5
JimB 17 अप्रैल 2017, 18:19