Ruby_Array_55

この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。

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)で表記揺れ