2013-11-25 16 views
28

मानते हैं कि यह रेंज कुंजी और मूल्य की "प्रतिलिपि" लौटाती है। क्या उस श्रेणी के पते को वापस करने के लिए उस सीमा का कोई तरीका है? उदाहरणगोलांग रेंज संदर्भ इसके बजाय

package main 

import "fmt" 

type MyType struct { 
    field string 
} 

func main() { 
    var array [10]MyType 

    for _, e := range array { 
     e.field = "foo" 
    } 

    for _, e := range array { 
     fmt.Println(e.field) 
     fmt.Println("--") 
    } 
} 

http://play.golang.org/p/AFOGG9NGpx

यहाँ "मैदान" संशोधित नहीं है सीमा क्षेत्र के प्रति भेजता क्योंकि, मैं सूचकांक का उपयोग करने के लिए या वहाँ मूल्य को संशोधित करने के किसी अन्य तरीके से है?

पढ़ने के लिए धन्यवाद।

+4

के संभावित डुप्लिकेट [मान बदलें जबकि golang में पुनरावृत्ति] (http://stackoverflow.com/questions/15945030/change-values-while-iterating-in-golang) –

+0

क्या आप 'माईटाइप' के सूचक की सरणी का उपयोग कर सकते हैं? – nvcnvn

+0

हां, यदि आप पॉइंटर्स की एक सरणी का उपयोग करते हैं तो आप सीधे इंडेक्स का उपयोग किए बिना सरणी में परिणामों को संशोधित कर सकते हैं, यहां एक उदाहरण है http://play.golang.org/p/_Vx7ONLDJs – notzippy

उत्तर

43

कम & सीधा जवाब: नहीं, मूल्य

के बजाय सरणी सूचकांक का उपयोग तो उपरोक्त कोड हो जाता है:

package main 

import "fmt" 

type MyType struct { 
    field string 
} 

func main() { 
    var array [10]MyType 

    for idx, _ := range array { 
     array[idx].field = "foo" 
    } 

    for _, e := range array { 
     fmt.Println(e.field) 
     fmt.Println("--") 
    } 
} 
+12

और निश्चित रूप से, यदि आप बार-बार 'सरणी [idx]' तक पहुंचते हैं तो आप लूप के शीर्ष पर 'e: = & array [idx] 'चुन सकते हैं और फिर' e.field1',' e.field2 का उपयोग करें ', आदि जो ओपी जैसा दिखता है वह शायद चाहता था (केवल एक के बजाय दो लाइनों के साथ)। –

संबंधित मुद्दे