人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ruby の質問です。#3 は、3になってしまうのですが、これは、Ruby の仕様なのでしょうか? 避けるにはどうしたらいいのでしょう。
カンマの数はどちらも同じなのです。
t = "1,2,3,," #3
#t = "1,2,3,x," #4
puts t.split(/,/).size


●質問者: kaiketsu
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Ruby 仕様
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● JULY
●23ポイント

String - Rubyリファレンスマニュアル

t.split(/,/, -1).size

で 5 となります。これがお望みの結果かな?


2 ● longicorn
●23ポイント

質問からは結果をどうしたいか? が書いていないので想像で回答します。


両方共同じ数で分割したいのであればこれでどうでしょうか?

irb(main):016:0> "1,2,3,,".scan(/.?,/).map{|v|v.delete(",")}
=> ["1", "2", "3", ""]
irb(main):017:0> "1,2,3,4,".scan(/.?,/).map{|v|v.delete(",")}
=> ["1", "2", "3", "4"]

ダミー

http://www.hatena.ne.jp/

◎質問者からの返答

こんなめんどうなことをしないといけないのでしょうか?


3 ● Cherenkov
●22ポイント

t=["a","b","c",""]

puts t.size #4

http://q.hatena.ne.jp/answer

◎質問者からの返答

単純に、split したときに、空があったら、空の値を持つ配列をつくって欲しいだけなんですが。。。。


4 ● garyo
●22ポイント

>単純に、split したときに、空があったら、空の値を持つ配列をつくって欲しいだけなんですが。。。。

1番の回答者JULYさんの回答が正しいと思いますよ。

split([sep[, limit]])

(中略)

limit は以下のいずれかです。


* 省略 or 0: 配列末尾の空文字列は取り除かれる。

* limit > 0: 最大 limit 個のフィールドに分割する。

* limit < 0: 無限に大きい limit が指定されたかのように分割する。


例: limit の例


# limit 省略時は、0 を指定したのと同じ。配列末尾の空文字列は取り除かれる

p "a,b,c,,,".split(/,/) # => ["a", "b", "c"]

p "a,b,c,,,".split(/,/, 0) # => ["a", "b", "c"]


# limit が 最大のフィールド数に満たない場合は最後の要素に残りすべてが入る

p "a,b,c,,,".split(/,/, 3) # => ["a", "b", "c,,,"]


# limit が -1 や最大のフィールド数以上の場合は最大のフィールド数を指定したのと同じ

p "a,b,c,,,".split(/,/, 6) # => ["a", "b", "c", "", "", ""]

p "a,b,c,,,".split(/,/, -1) # => ["a", "b", "c", "", "", ""]

p "a,b,c,,,".split(/,/, 100) # => ["a", "b", "c", "", "", ""]

http://www.ruby-lang.org/ja/man/html/String.html

◎質問者からの返答

なるほど、そういった仕様なんですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ