2015-01-08 16 views
12

मैं गो के साथ खेल रहा हूं लेकिन मुझे ऐसी चीजें करने में बहुत कठिन समय है जो अन्य भाषाओं में बहुत ही सरल हैं।गोलांग पाइथन की सूची समझ के बराबर

array = [a for a in anotherArray if (some condition)] 

जाओ में यह करने के लिए एक सुंदर तरीका क्या है:

मैं एक ऐसी ही वाक्य रचना पुन: पेश करना चाहते हैं? मैं वास्तव में सरणी पर फ़ंक्शन का उपयोग करते समय अपने कोड को सरल बनाना चाहता हूं। उदाहरण के लिए:

min = min(abs(a[i], b[j]) for i in range(n) 
          for j in range(i, n)) 

बहुत धन्यवाद

+3

मुझे लगता है कि आप जिस शब्द को खोज रहे हैं वह है पाइथन सूची 'समझ' –

+3

बस लूप स्वयं लिखें। प्रोग्रामिंग चोट नहीं पहुंचाता है। – Volker

+0

@ वोल्कर डाउनवोट क्यों? क्या आपको [जेन जेनेरिक चर्चा का सारांश] नहीं मिला (https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/mobilebasic?pli=1) दिलचस्प है? उस दस्तावेज़ में आपकी टिप्पणी के समान अनुशंसाएं शामिल हैं। – VonC

उत्तर

6

दिलचस्प बात यह Rob Pike सिर्फ प्रस्तावित (18 घंटे पहले) पुस्तकालय filter जो थोड़ा करता है कि आप क्या चाहते:

देखें for instance Choose()

// Choose takes a slice of type []T and a function of type func(T) bool. (If 
// the input conditions are not satisfied, Choose panics.) It returns a newly 
// allocated slice containing only those elements of the input slice that 
// satisfy the function. 

Tested here:

बाहर
func TestChoose(t *testing.T) { 
    a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} 
    expect := []int{2, 4, 6, 8} 
    result := Choose(a, isEven) 

twotwotwo के रूप में अंक, GoDoc for this library कहता है:

पैकेज filter एक फिल्टर समारोह के वितरित आवेदन के माध्यम से स्लाइस छानने के लिए उपयोगिता कार्यों में शामिल है।

पैकेज यह देखने के लिए एक प्रयोग है कि गो में ऐसी चीजें लिखना कितना आसान है। यह आसान है, लेकिन for लूप उतना ही आसान और अधिक कुशल है।

आपको इस पैकेज का उपयोग नहीं करना चाहिए।

यह चेतावनी दस्तावेज़ "Summary of Go Generics Discussions" में दिखाई देता है, अनुभाग "Functional Code":

ये सामान्य higher-order functions जैसे map, reduce (fold), filter, zip आदि हैं

मामले:
टाइपएफ़ डेटा ट्रांसफॉर्मियो एनएस: map, fold, zip

पेशेवरों जेनरिक प्रयोग करने के लिए:
संक्षिप्त तरीके से डेटा परिवर्तनों व्यक्त करते हैं।

विपक्ष जेनरिक प्रयोग करने के लिए:
सबसे तेजी से समाधान को ध्यान में रखना जब और जो आदेश उन परिवर्तनों को लागू करने की जरूरत है, और कितना डेटा प्रत्येक चरण में उत्पन्न होता है।
शुरुआती लोगों के लिए पढ़ना मुश्किल है।

वैकल्पिक समाधान:

उपयोग for छोरों और हमेशा की तरह भाषा का निर्माण

+1

मैं पाइक के रीडमे से सहमत हूं - 'के लिए' उपयोग करें। संभवतः हमेशा के लिए लेकिन निश्चित रूप से, गो एक अनिवार्य भाषा है जो सीधी रेखा कोड का पक्ष लेती है। संभवतः भाषा अन्य दृष्टिकोणों को आसान बनाने के लिए नहीं बदलेगी, इस पर ध्यान दिए बिना कि कितने लोग चाहते हैं। पैकेज का बिंदु था (शिकायतें प्राप्त करने के बाद) कि आप उस तरह की चीज कर सकते हैं यदि आपको लगता है कि आपको वास्तव में * प्रतिबिंबित करने और सामान के साथ इसकी आवश्यकता है, न कि वह आपको सोचता है कि आपको चाहिए। – twotwotwo

+0

@twotwotwo हां, मुझे लगता है कि '' के लिए '', और कुछ '' जेनरेट करें '' पर्याप्त होना चाहिए। – VonC

+6

प्रमुख नोट करें "आपको इस पैकेज का उपयोग नहीं करना चाहिए।" http://godoc.org/robpike.io/filter – twotwotwo

1

यदि आप जो देख रहे हैं वह वास्तव में पाइथन सूची समझ है, तो AFAIK जाने में ऐसा कोई वाक्य रचनात्मक समकक्ष नहीं है।

ऐसा करने का तरीका एक टुकड़ा बनाना है जो एक टुकड़ा और एक समारोह (स्थिति का परीक्षण करने के लिए) और एक नया टुकड़ा लौटाता है।

संपादित करें: ऐसा लगता है कि गो में पहले से ही ऐसी सुविधा है। सीएफ वॉनसी

+0

गो में नहीं (केवल गिटहब पर एक सामान्य लाइब्रेरी) और दस्तावेज़ीकरण आपको सलाह देता है कि आप इसका उपयोग न करें; यह दिखाने के लिए सिर्फ एक प्रयोग है कि आप इसे कर सकते हैं यदि आप चाहते हैं। – twotwotwo

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