2016-10-04 19 views
0

Rubyの新機能です。私は2つの文字列それぞれに一連の配列があります。私は、整数に各配列の数で文字列を変換しようとしていますRuby Array:整数を文字列に変換

["[[\"Wayfair \", \"57\"]]", "[[\"Move24 \", \"26\"]]", 
    "[[\"GetYourGuide \", \"25\"]]", "[[\"Visual Meta \", \"22\"]]", 
    "[[\"FinLeap \", \"20\"]]", "[[\"Movinga \", \"20\"]]", 
    "[[\"DCMN \", \"19\"]]", ... 

を、私は私が予想よりも何かを得る:

companies = companies.map do |company| 
    c = company[0].scan(/(.+)\((\d+)\)/).inspect 
    [c[0], c[1].to_i] 
end 

プット:

["[", 0], ["[", 0], ["[", 0], ["[", 0], ["[", 0], ["[", 0], 
    ["[", 0], ["[", 0], ["[", 0], ["[", 0], ["[", 0]] 

私は期待してい:

["Wayfair", 57], ["Move24", 26], ["GetYourGuide", 25], ... 

助けてください?

全コード:に考えられている

require 'json' 

companies.map { |elem| key, val = JSON.parse(elem).flatten; [k.strip, v.to_i] } 

代わりのJSON.parseは、あなたもevalを使用できますが、evalを使用して:

require 'net/http' 
require 'uri' 

uri = URI('http://berlinstartupjobs.com/') #URI takes just one url 
req = Net::HTTP::Get.new(uri) #get in URI 
req['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36' #use this header 


res = Net::HTTP.start(uri.hostname, uri.port) {|http| http.request(req)} # URI documentation 

puts res.code #status code 

puts res.body 

puts res.body.scan('<a href="http://berlinstartupjobs.com/companies/') #scan in the body of the document files that match a href=... 

puts res.body.scan(/<a href="http:\/\/berlinstartupjobs\.com\/companies\/[^\s]+ class="tag-link">(.*)<\/a>/) #scan 

companies = res.body.scan(/<a href="http:\/\/berlinstartupjobs\.com\/companies\/[^\s]+ class="tag-link">(.*)<\/a>/) 


companies = companies.map do |company| 
    c = company[0].scan(/(.+)\((\d+)\)/).inspect 
    [c[0], c[1].to_i] 
end # do ... end = { } 

    puts companies.inspect 
+1

予想される出力も表示できますか? –

+1

私はそれを見て、あなたは弦のフラットな配列を持っています。 –

+0

ええ、期待された出力を見てうれしい – Phil

答えて

1

あなたのコードは大丈夫でした。最後に.inspectをドロップしてください。配列ではなく文字列を返します。

# this is what you get from the scraping. 
companies = [["Wayfair (57)"], ["Move24 (26)"], ["GetYourGuide (25)"]] 

companies = companies.flatten.map do |company| 
    c = company.scan(/(.+)\((\d+)\)/).flatten 
    [c[0], c[1].to_i] 
end 

p companies 
# >> [["Wayfair ", 57], ["Move24 ", 26], ["GetYourGuide ", 25], ...] 
+0

ねえ、セルジオは本当にありがとう - これは私が必要なものです。 私は気分が一気になっていて、それで遊んでいましたが、この方法ではありませんでした。再度、感謝します :) – catch22

1

あなたはJSON.parseを使用して各要素を解析Enumerable#map &を使用することによって、これを達成することができます悪い習慣である。

+0

nah、彼のデータはそうではありません。 OPはちょうど印刷を台無しにしました。 –

1
arr = ["[[\"Wayfair \", \"57\"]]", "[[\"Move24 \", \"26\"]]"] 
result = arr.collect{|e| JSON.parse(e)[0].map{|name, value| [name.strip, value.to_i]}} 

OUTPUT: 
[[Wayfair, 57], [Move24", 26]] 
+0

nah、彼のデータはそうではありません。 OPはちょうど印刷を台無しにしました。 –

関連する問題