この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.1 リファレンスマニュアル)
インスタンスメソッド
slice(nth) -> object | nil
- 指定された自身の要素を返す
- Array#[]と同じ
irb(main):001:0> %w[a b c].slice(1) => "b" irb(main):002:0> %w[a b c].slice(-2) => "b" irb(main):003:0> %w[a b c].slice(1.0) => "b" irb(main):004:0> %w[a b c].slice(10) => nil irb(main):005:0> %w[a b c].slice(-5) => nil
irb(main):001:0> %w[a b c].slice('1') (irb):4:in `slice': no implicit conversion of String into Integer (TypeError) from (irb):4:in `<main>' from /Users/mfham/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `load' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `<main>'
slice(pos, len) -> Array | nil
slice(range) -> Array | nil
- 指定された自身の部分配列を返す
- Array#[]と同じ
irb(main):001:0> %w[a b c].slice(0, 2) => ["a", "b"] irb(main):002:0> %w[a b c].slice(0, 10) => ["a", "b", "c"] irb(main):003:0> %w[a b c].slice(2, 1) => ["c"] irb(main):004:0> %w[a b c].slice(-2, 10) => ["b", "c"] # 次の二つはArray#[]でもメモしていたややこしいパターンだったはず irb(main):005:0> %w[a b c].slice(3, 1) => [] irb(main):006:0> %w[a b c].slice(4, 10) => nil
irb(main):001:0> %w[a b c].slice(1..2) => ["b", "c"] irb(main):002:0> %w[a b c].slice(3..4) => [] irb(main):003:0> %w[a b c].slice(4..5) => nil irb(main):004:0> %w[a b c].slice(-3..-3) => ["a"] irb(main):005:0> %w[a b c].slice(-3..-4) => [] irb(main):006:0> %w[a b c].slice(-4..-5) => nil
slice!(nth) -> object | nil
- 指定した要素を自身から取り除き、取り除いた要素を返す
- 取り除く要素がなければnilを返す
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.slice!(1) => "b" irb(main):003:0> arr => ["a", "c", "d", "e"] irb(main):004:0> arr.slice!(-1) => "e" irb(main):005:0> arr => ["a", "c", "d"] irb(main):006:0> arr.slice!(100) => nil irb(main):007:0> arr.slice!(-100) => nil irb(main):008:0> arr => ["a", "c", "d"]
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.slice!(1.0) => "b" irb(main):003:0> arr.slice!('1') (irb):3:in `slice!': no implicit conversion of String into Integer (TypeError) from (irb):3:in `<main>' from /Users/mfham/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `load' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `<main>'
slice!(start, len) -> Array | nil
slice!(range) -> Array | nil
- 指定した部分配列を自身から取り除き、取り除いた部分を返す
- 取り除く要素がなければnilを返す
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.slice!(0, 2) => ["a", "b"] irb(main):003:0> arr => ["c", "d", "e"] irb(main):004:0> arr.slice!(0, 100) => ["c", "d", "e"] irb(main):005:0> arr => []
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.slice!(5, 1) => [] irb(main):003:0> arr => ["a", "b", "c", "d", "e"] irb(main):004:0> arr.slice!(6, 1) => nil irb(main):005:0> arr => ["a", "b", "c", "d", "e"]
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.slice!(2..3) => ["c", "d"] irb(main):003:0> arr => ["a", "b", "e"]
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.slice!(1, 0) => [] irb(main):003:0> arr.slice!(1, -1) => nil # memo # 覚えておきたい
irb(main):017:0> [].slice(0, 0) => [] irb(main):018:0> [].slice(0, 1) => [] irb(main):019:0> [].slice(0, -1) => nil irb(main):020:0> [].slice(1, 0) => nil irb(main):021:0> [].slice(1, 1) => nil irb(main):022:0> [].slice(1, -1) => nil irb(main):001:0> [1].slice(1, 0) => [] irb(main):002:0> [1].slice(1, 1) => [] irb(main):003:0> [1].slice(1, -1) => nil irb(main):004:0> [1].slice(2, 0) => nil irb(main):005:0> [1].slice(2, 1) => nil irb(main):006:0> [1].slice(2, -1) => nil # memo # 空配列に対しても考え方は同じようだ
メモ
- slice(pos, len)とslice!(start, len)で表記揺れ