/ / Как да направите метод за разделяне на две струни в масив? - рубин

Как да направите метод за разделяне на две струни в масив? - рубин

Опитвам се да върна две струни в масив в отделни думи:

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"]