前提・実現したいこと
初めまして、ネットワークエンジニアの仕事をする中でプログラミングの必要性を感じ、Rubyを勉強し始めている初心者です。
下記のような文字列を分解したいと思っていますが、範囲を扱う部分が上手く動作しません。
お力を貸していただけませんでしょうか?
宜しくお願い致します。
発生している問題・エラーメッセージ
Traceback (most recent call last): 2: from vlan_split.rb:11:in `<main>' 1: from vlan_split.rb:11:in `map' vlan_split.rb:11:in `block in <main>': undefined method `to_a' for "1500..1503":String (NoMethodError) Did you mean? to_c to_r to_f to_i to_s
該当のソースコード
Ruby
1実際には数字は小さいものから順番に並んでいますが、バラバラの文字列でも並び替えて表示できるようにしたいと考えています。 2例) 3vlan = "20,1500-1503,50,30-35,5-8,300-302" 4想定する文字列 5vlan = "5,6,7,8,20,30,31,32,33,34,35,50,300,301,302,1500,1501,1502,1503" 6 7# 範囲を表す文字列とそうじゃないものを分けてから最後に合わせようと考えました 8a = vlan.gsub(/-/, "..").split(",") 9vlan_a = a.reject{|a| a.include?("..")}.map(&:to_i) # [20, 50] 10 11vlan_b = a.select{|a| a.include?("..")} # ["1500..1503", "30..35", "5..8", "300..302"] 12 13# ここで、vlan_b を下記のような配列に変換したいのですが方法がわかりません。 14[1500..1503, 30..35, 5..8, 300..302] 15 16# この後やりたい事は、 17mapped = vlan_b.map { |i| i.to_a } 18vlan_bm = mapped.flatten 19p (vlan_a + vlan_bm).sort 20
試したこと
範囲を表している部分が文字列になってしまっていることがエラーの原因と考えますが、修正する術がわかりません。
補足情報(FW/ツールのバージョンなど)
Windows10 環境で Ruby をインストールしています。
ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/24 21:55