रूबी में एक स्ट्रिंग कैसे विभाजित करें और पहले एक को छोड़कर सभी आइटम प्राप्त करें?


83

स्ट्रिंग है ex="test1, test2, test3, test4, test5"

जब मैं उपयोग करता हूं

ex.split(",").first

यह लौट आता है

"test1"

अब मैं शेष वस्तुओं को प्राप्त करना चाहता हूं, अर्थात `'टेस्ट 2, टेस्ट 3, टेस्ट 4, टेस्ट 5' '। अगर मैं उपयोग करता हूं

ex.split(",").last

यह केवल लौटता है

"test5"

पहले बची हुई सभी वस्तुओं को कैसे प्राप्त करें?


रुको, आप split(एक Stringविधि) का उपयोग कर रहे हैं पर Array?
कोनराड रुडोल्फ

क्षमा करें ... मैं यहाँ स्ट्रिंग का उपयोग कर रहा हूँ .. मैं प्रश्न संपादित करूंगा
sgi

जवाबों:


98

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

first, *rest = ex.split(/, /)

अब firstपहला मूल्य restहोगा, बाकी सरणी होगा।


1
रूबी के किस संस्करण में? मैंने इसे 1.8.7 में आज़माया और restइसमें केवल "test2" शामिल है।
जोनास एलफ्रॉस्टेम

7
शायद मतलब हैfirst,*rest = ex.split(/,/)
ezpz

हां, मैं उस समय अपनी लाइन का परीक्षण नहीं कर सका। first, *rest = ex.split(/,/)वास्तव में मेरा क्या मतलब था। इसे साफ करने के लिए धन्यवाद।
avdgaag

एक अन्य तरीका परिणामी सरणी से एक सीमा प्राप्त करना है। things = ex.split(/,/); things[1..-1]
रसेल बी

44
ex.split(',', 2).last

अंत में 2 कहता है: 2 टुकड़ों में विभाजित करें, अधिक नहीं।

आम तौर पर विभाजित मूल्य को कई टुकड़ों में काट देगा, जैसा कि दूसरे मूल्य का उपयोग करके आप यह सीमित कर सकते हैं कि आपको कितने टुकड़े मिलेंगे। का उपयोग ex.split(',', 2)कर आप दे देंगे:

["test1", "test2, test3, test4, test5"]

इसके बजाय एक सरणी के रूप में:

["test1", "test2", "test3", "test4", "test5"]

नकारात्मक पक्ष यह है splitकि यदि आप एक स्ट्रिंग के बजाय एक सरणी के रूप में सभी मान चाहते हैं, तो आपको फिर से करना होगा। फिर भी एक अच्छी चाल। इसके अलावा, उपयोग करने से ex.split(',', 2).lastआपके द्वारा उल्लेखित सरणी वापस नहीं होगी, केवल इसका अंतिम मूल्य, सही?
avdgaag

कॉपी-पेस्ट गलती हा, इसे तय किया
user163365

15

जब से आपको एक सरणी मिली है, जो आप वास्तव में चाहते हैं वह है Array#slice, नहीं split

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]

3
इसलिए एक स्ट्रिंग के साथ आप ex.split(/, /).slice(1..-1)सभी लेकिन पहले तत्वों को प्राप्त करना चाहते हैं, यह मानते हुए कि आप पहले मूल्य में रुचि नहीं रखते हैं।
avdgaag

9

आपने शायद कुछ चीजों को गलत समझा। मैं जो इकट्ठा करता हूं, उससे आप एक स्ट्रिंग शुरू करते हैं जैसे:

string = "test1, test2, test3, test4, test5"

फिर आप इसे केवल महत्वपूर्ण पदार्थों को रखने के लिए विभाजित करना चाहते हैं:

array = string.split(/, /)

और अंत में आपको केवल पहले को छोड़कर सभी तत्वों की आवश्यकता है:

# We extract and remove the first element from array
first_element = array.shift

# Now array contains the expected result, you can check it with
puts array.inspect

क्या यह आपके प्रश्न का उत्तर है?



6

पार्टी के लिए थोड़ी देर और थोड़ा आश्चर्य हुआ कि किसी ने ड्रॉप विधि का उल्लेख नहीं किया :

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"

5

अगर आप उन्हें पहले से ज्ञात एक सरणी यू के रूप में उपयोग करना चाहते हैं, तो यू उनमें से हर एक को एक अलग पैरामीटर के रूप में उपयोग कर सकते हैं ... यह कोशिश करें:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")

2

आप यह भी कर सकते हैं:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 

0

कोशिश करें split(",")[i]कि iपरिणाम सरणी में सूचकांक कहां है। splitनीचे सरणी देता है

["test1", " test2", " test3", " test4", " test5"] 

जिसका तत्व सूचकांक द्वारा पहुँचा जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.