तत्व की अनुक्रमणिका के आधार पर सरणी तत्वों में शामिल हों

मेरे पास यह सरणी है: ['here', 'are', 'some', '123', 'data'] । मैं इन तीन तारों को प्राप्त करने के लिए '123' से पहले तत्वों में शामिल होना चाहता हूं और '123' के बाद तत्वों को अन्य स्ट्रिंग में प्राप्त करना चाहता हूं:

  • 'यहां कुछ हैं'
  • <कोड> '123'
  • 'डेटा'

मुझे arr.index {| el | द्वारा '123' की अनुक्रमणिका मिलती है el = ~/\ d {3} /} । मैंने शामिल विधि की कोशिश की, लेकिन मुझे कुछ शर्तों को जोड़ने का कोई तरीका नहीं मिला। मैंने मैन्युअल रूप से तत्वों में शामिल होने के लिए array.each {...} का उपयोग करके एक समाधान विकसित किया। यह करने के लिए सबसे अच्छा तरीका क्या है?

0

3 उत्तर

arr.chunk{|e| (e =~ /\d{3}/) || false}.map{|a| a.last.join(" ")}
# => ["here are some", "123", "data"]
0
जोड़ा
arr = [ 'here', 'are', 'some', '123', 'data' ]
i = arr.index {|el| el =~ /\d{3}/ }

arr[0..i-1].join(' ') # => here are some
arr[i] # => 123
arr[i+1..-1].join(' ') # => data
0
जोड़ा
यह ठीक वही है जिसकी मुझे तलाश थी! धन्यवाद!
जोड़ा लेखक Simon Ninon, स्रोत
b = a.index {|el| el =~ /\d{3}/}
s = [a[0..b-1].join(" "),a[b],a[b+1..a.size-1].join(" ")]

तो s [0] , s [1] , s [2] 3 तार होंगे। क्या यह वही है आप जिसकी तलाश में हैं?

0
जोड़ा