/ / सरणी में दो तारों को विभाजित करने के लिए विधि कैसे बनाएं? - माणिक

सरणी में दो तारों को विभाजित करने के लिए विधि कैसे बनाएं? - माणिक

मैं अलग-अलग शब्दों में एक सरणी में दो तारों को वापस करने की कोशिश कर रहा हूं:

list = ["hello my name is ryan", "hole me llamo"]
def splitter(inp)
inp.each.split(" ")
end

print splitter(list)

यह रिटर्न:

ruby splitter.rb
splitter.rb:4:in `splitter": undefined method `strsplit" for # <Enumerator: ["hello my name is ryan", "hole me llamo"]:each> (NoMethodError)
from splitter.rb:7:in `<main>"

अगर मैं उपयोग नहीं करता तो यह काम करता है .each और उपयोग करें inp(0) या inp(1) लेकिन केवल एक स्ट्रिंग रिटर्न।

मैं दोनों तारों को वापस कैसे प्राप्त कर सकता हूं?

उत्तर:

जवाब के लिए 2 № 1

यहां एक ऐसा है जो आपको करना चाहिए:

def splitter(inp)
inp.flat_map(&:split)
end
splitter list
# => ["hello", "my", "name", "is", "ryan", "hole", "me", "llamo"]

आपके कोड में inp.each वास्तव में एक विधि कॉल था Array#each, बिना एक के खंड एक देता है Enumerator। तथा String#spilt मौजूद है, लेकिन इस तरह की विधि नहीं है Enumerator#split, इसीलिए NoMethod त्रुटि उड़ाती है।

और यदि आप प्रत्येक व्यक्तिगत तारों के लिए शब्दों की सरणी चाहते हैं, तो

def splitter(inp)
inp.map(&:split)
end
splitter list
# => [["hello", "my", "name", "is", "ryan"], ["hole", "me", "llamo"]]

जवाब के लिए 0 № 2

अगर मैं सही तरीके से प्रश्न समझता हूं, तो यह सिर्फ है:

list = ["hello my name is ryan", "hole me llamo"]

list.join(" ").split
#=> ["hello", "my", "name", "is", "ryan", "hole", "me", "llamo"]