दिलचस्प पोस्ट
जेएनआई साझा लाइब्रेरी (जेडीके) लोड करने में विफल सीएसएस के साथ ब्लॉक तत्वों के क्रम को बदलना सी और सी ++ कंपाइलर्स फ़ंक्शन के हस्ताक्षर में ऐरे लम्बाई क्यों करते हैं, जब वे कभी लागू नहीं करते हैं? त्रुटि: ANDROID_HOME सेट नहीं है और "android" आदेश आपके पथ में नहीं है। आपको इन शर्तों में से कम से कम एक को पूरा करना होगा पायथन में एक स्ट्रिंग से सब कुछ स्ट्रिपिंग लेकिन अल्फ़ान्यूमेरिक वर्ण जावास्क्रिप्ट में क्लास कैसे जोड़ / निकालें? डाटाबाउंडिंग प्रकार सुरक्षित कैसे करें और रिफैक्टरिंग का समर्थन कैसे करें चेतावनी: सीएसआरएफ टोकन प्रामाणिकता रेल को सत्यापित नहीं किया जा सकता MATLAB में, क्या मैं एक फाइल में स्क्रिप्ट और फ़ंक्शन परिभाषा कर सकता हूं? मैं "नेटवर्क" समय कैसे प्राप्त कर सकता हूं, ("स्वचालित" सेटिंग से "नेटवर्क-प्रदान किए गए मानों का उपयोग करें" कहलाता है), फोन पर समय नहीं है? VS2010 वेब परिनियोजन पैकेज का उपयोग करते हुए आप अतिरिक्त फ़ाइलों को कैसे शामिल करते हैं? कॉर्स पहुंच-नियंत्रण-अनुमति-हेडर्स वाइल्डकार्ड को अनदेखा किया जा रहा है? मैं 2 डी बहुभुज के क्षेत्र की गणना कैसे करूं? सेलेनियम के साथ दृश्य में तत्व स्क्रॉल करें एक वस्तु / फ़ंक्शन / क्लास घोषणापत्र के आसपास के कोष्ठक क्या होता है?

रूबी में संख्याओं की सरणी कैसे जोड़ती है?

मेरे पास पूर्णांकों की एक सरणी है

उदाहरण के लिए:

array = [123,321,12389] 

क्या उनको मिलाने का कोई अच्छा तरीका है?

मुझे पता है कि

 sum = 0 array.each { |a| sum+=a } 

काम करेगा।

वेब के समाधान से एकत्रित समाधान "रूबी में संख्याओं की सरणी कैसे जोड़ती है?"

इसे इस्तेमाल करे:

 array.inject(0){|sum,x| sum + x } 

रूबी की उल्लेखनीय प्रलेख देखें

(ध्यान दें: 0 बेस केस की आवश्यकता है ताकि nil बजाय रिक्त सरणी पर वापस किया जा सके)

या रूबी 1.9 तरह का प्रयास करें:

 array.inject(0, :+) 

नोट: 0 बेस केस की आवश्यकता है अन्यथा रिक्त एरे पर nil जाएगा:

 > [].inject(:+) nil > [].inject(0, :+) 0 
 array.reduce(0, :+) 

जबकि array.inject(0, :+) समतुल्य array.inject(0, :+) , शब्द कम होकर MapReduce प्रोग्रामिंग मॉडल के उदय के साथ अधिक आम भाषा में प्रवेश कर रहा है।

इंजेक्शन , कम , गुना , जमा , और संपीड़ित तह फ़ंक्शंस के एक वर्ग के रूप में सभी पर्याय हैं। मुझे अपने कोड बेस में सुसंगतता सबसे महत्वपूर्ण मिलती है, लेकिन चूंकि विभिन्न समुदायों में एक शब्द एक से अधिक पसंद करते हैं, फिर भी विकल्प जानना अभी भी उपयोगी है I

नक्शे पर जोर देने के लिए, शब्दाडंबर को कम करने के लिए, यहां एक ऐसा संस्करण है जो उस सरणी में समाप्त होने पर थोड़ा और अधिक क्षमा करता है।

 array.map(&:to_i).reduce(0, :+) 

कुछ अतिरिक्त प्रासंगिक रीडिंग:

वैकल्पिक रूप से (केवल तुलना के लिए), यदि आपके पास रेल स्थापित हैं (वास्तव में केवल ActiveSupport):

 require 'activesupport' array.sum 

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

 class Array def sum inject { |sum, x| sum + x } end end 

फिर मज़े की चीजें पसंद करें:

 [1, 2, 3, 4].sum 

रूबी 1.8.7 तरह निम्न है:

 array.inject(0, &:+) 

बस विविधता की खातिर, आप यह भी कर सकते हैं यदि आपकी सरणी संख्याओं की एक सरणी नहीं है, बल्कि उन वस्तुओं की एक सरणी होती है, जो गुण हैं (जैसे राशि):

 array.inject(0){|sum,x| sum + x.amount} 

रुबी 2.4.0 के लिए नया

आप उपयुक्त नामांकित विधि का उपयोग कर सकते हैं Enumerable#sum इसमें inject(:+) पर बहुत सारे फायदे हैं, लेकिन अंत में भी पढ़ने के लिए कुछ महत्वपूर्ण नोट्स हैं।

उदाहरण

सीमाओं

 (1..100).sum #=> 5050 

Arrays

 [1, 2, 4, 9, 2, 3].sum #=> 21 [1.9, 6.3, 20.3, 49.2].sum #=> 77.7 

महत्वपूर्ण लेख

यह विधि #inject(:+) बराबर नहीं है उदाहरण के लिए

 %w(abc).inject(:+) #=> "abc" %w(abc).sum #=> TypeError: String can't be coerced into Integer 

इसके अलावा,

 (1..1000000000).sum #=> 500000000500000000 (execution time: less than 1s) (1..1000000000).inject(:+) #=> 500000000500000000 (execution time: upwards of a minute) 

sum इस तरह क्यों है पर अधिक जानकारी के लिए इस उत्तर देखें

आप बस का उपयोग कर सकते हैं:

  example = [1,2,3] example.inject(:+) 

रूबी array.sum / रेल – array.sum अर्थात् [1, 2, 3].sum # => 6

रूबी पूर्व 2.4 – array.inject(:+) या array.reduce(:+)

* नोट: #sum विधि, #sum लिए 2.4 के साथ एक नई अतिरिक्त है, इसलिए अब आप केवल शुद्ध array.sum में array.sum का उपयोग करने में सक्षम नहीं होंगे।

इसके अलावा [1,2].sum{|x| x * 2 } == 6 लिए अनुमति देता है [1,2].sum{|x| x * 2 } == 6 :

 # http://madeofcode.com/posts/74-ruby-core-extension-array-sum class Array def sum(method = nil, &block) if block_given? raise ArgumentError, "You cannot pass a block and a method!" if method inject(0) { |sum, i| sum + yield(i) } elsif method inject(0) { |sum, i| sum + i.send(method) } else inject(0) { |sum, i| sum + i } end end end 

रुबी 2.4.0 जारी की गई है, और इसमें एक गणनीय # राशि विधि है तो आप ऐसा कर सकते हैं

 array.sum 

डॉक्स से उदाहरण:

 { 1 => 10, 2 => 20 }.sum {|k, v| k * v } #=> 50 (1..10).sum #=> 55 (1..10).sum {|v| v * 2 } #=> 110 
 array.reduce(:+) 

रेंज के लिए भी काम करता है … इसलिए,

 (1..10).reduce(:+) returns 55 

आप पुनरावर्तन का उपयोग भी कर सकते हैं

 def sum(array) array.length == 1 ? array.pop() : array.pop() + sum(array) end 

अगर आप विनाशकारी नहीं बनना चाहते हैं, तो एक क्लोन बनाएं

यदि आप गोल्फ महसूस करते हैं, तो आप ऐसा कर सकते हैं

 eval([123,321,12389]*?+) 

यह एक स्ट्रिंग "123 + 321 + 1238 9" बनायेगा और फिर योग करने के लिए फ़ंक्शन eval का उपयोग करें। यह केवल गोल्फ उद्देश्य के लिए है , आपको उचित कोड में इसका उपयोग नहीं करना चाहिए।

या आप इस पद्धति का प्रयास कर सकते हैं:

 def sum arr 0 if arr.empty arr.inject :+ end 

आप इसे आसान तरीके से भी कर सकते हैं

 def sum(numbers) return 0 if numbers.length < 1 result = 0 numbers.each { |num| result += num } result end 

आप .map और .sum का उपयोग कर सकते हैं जैसे:

 array.map { |e| e }.sum