はじめに
移植やってます。
slice (Python)
s = slice(0, 10, 3)
print(type(s))
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][s]
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][s.start:s.stop:s.step]
print(a)
# <class 'slice'>
# [1, 4, 7, 10]
Python
ってslice
クラスがあるんですね。
3つの数値を持ったタプルなんだと思いますが。
どうする? (Ruby)
slice = Struct.new(:start, :stop, :step)
s = slice.new(0, 5, 3)
puts s
puts s.class
puts s.instance_of?(slice)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][s.start, s.stop]
print(a)
# #<struct start=0, stop=5, step=3>
# #<Class:0x000001e08c9f3260>
# true
# [1, 2, 3, 4, 5]
Struct
で代用できそうな気もします。
Slice
クラスを作る?
class Slice
attr_reader :start, :stop, :step
def initialize(start, stop, step)
@start = start
@stop = stop
@step = step
end
def slice(array)
@start = 0 if @start.nil?
@stop = -1 if @stop.nil?
if @step.nil?
array[@start..@stop]
else
array[@start..@stop].select.with_index{ |num, i| i % @step == 0 }
end
end
end
s = Slice.new(0, nil, 3)
puts s.class
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(s.slice a)
# Slice
# [1, 4, 7, 10]
メモ
- Python の sliceクラス を学習した
- 道のりは遠そう