配列(リスト)の一部を配列として取り出すには (subList / slice / array_slice) 2015/03/31
配列(リスト)の一部を配列として取り出す方法。
関連
Go言語 (golang) 2015/12/22
arr[start : end]
という書式で、配列の一部をスライスとして取り出すことができる。スライスは配列のビューになっており、スライスの要素を変更すると元の配列にも反映される。
arr := [4]int{1, 3, 5, 7}
fmt.Printf("%#v\n", arr)
# [4]int{1, 3, 5, 7}
sl := arr[1:2]
fmt.Printf("%#v\n", sl)
# []int{3}
sl2 := append(sl, 10)
fmt.Printf("%#v\n", arr)
# [4]int{1, 3, 10, 7}
fmt.Printf("%#v\n", sl)
# []int{3}
fmt.Printf("%#v\n", sl2)
# []int{3, 10}
配列だけでなくスライスのスライスも同じようにできる。
Java
配列 2016/08/16
Signature:
T<E> E[] Arrays.copyOfRange(E[] original, int from, int until)
int[] Arrays.copyOfRange(int[] original, int from, int until)
新しい配列を生成して、そこに元の配列の一部をコピーする。
Signatureは2つしか書かなかったがすべてのプリミティブ型に対応するメソッドが用意されている。
返り値の配列の最後の要素は、元の配列のインデックス until - 1
の要素になる。
配列のコピーなので、返り値の配列の要素を変更しても、元の配列には反映されない。ただし、要素のオブジェクト自体はコピーしないので、要素のオブジェクトが可変の場合にそれを変更したら元の配列からも変更が見える。
java.util.List
2016/08/16
Signature:
リストの一部のビューをリストとして取得できる。
返り値のリストの最後は、元のリストのインデックス until - 1
の要素になる。
subList
で返されたリストを変更すると、元のリストにも反映される。
Scala 2013/10/04
Signature:
返り値のリストの最後は、元のリストのインデックス until - 1
の要素になる。
PHP 2015/01/13
array_slice
関数を使う。引数は順番に配列、from、length。lengthを省略すると配列の最後までになる。
$arr = array(10, 20, 30, 40, 50);
var_export(array_slice($arr, 1, 2));
// 出力結果
// array (
// 0 => 20,
// 1 => 30,
// )
array_slice
関数 | PHP Manual
http://php.net/manual/ja/function.array-slice.php
Python 2014/04/10
以下はPythonのシーケンスといわれるリスト、タプル、文字列で共通操作で、スライス表記という。範囲を指定して部分リストを取得できる。
lst[from:until]
返り値のリストの最後は、元のリストのインデックス until - 1
になる。
from
と until
のどちらかまたは両方を省略できる。
lst[from:] # from から最後まで
lst[:until] # 先頭から until - 1 まで
lst[:] # 先頭から最後まで
lst[:-1] # 先頭から、最後から数えて2番目まで
lst[:]
の書き方はリストをコピーする目的で使える。
-> リストをコピーするには
スライス表記には3つ目の引数を与えることもでき、いくつおきに要素を抽出するかを表す。省略した場合は1
とみなされる。
lst[::2] # 1番目、3番目、、、と2つおき
lst[1::2] # 2番め、4番目、、、と2つおき
lst[::-1] # 逆順
スライス表記 (slicing) | Python 言語リファレンス
http://docs.python.jp/2.7/reference/expressions.html#slicing
Ruby / JRuby 2015/01/01
Array#slice
または Array#[]
を使う。
arr.slice(from, length) # from から from + length - 1 まで
arr.slice(from..to) # from から to まで (toを含む)
arr.slice(index) # indexの要素のみを取得
length
を省略したら、from以降の部分配列ではなく、その場所の要素を返す([]
でインデックスを使った要素へのアクセスと同じ)。
arr.slice(index, 1)
はその場所の要素だけの配列を返すので、これとも違う。
slice
メソッドの代わりに []
も同じ使い方ができる。
at
はこの使い方ができない。
slice
や []
を使った要素へのアクセスや範囲を指定してのアクセスは、
文字列に対しても全く同じ使い方ができる。
例
arr = [10, 20, 30, 40, 50]
s = 2
e = 3
p arr[s..e]
# => [30, 40]
Array#[]
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/=5b=5d.html
Array#slice
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/slice.html
Perl 2013/07/27
my @arr = ('abc', 'def', 'ghi');
print "@arr[0..1]"; # => abc def
print "@arr[0,2]"; # => abc ghi
print "@arr[1..$#arr]"; # => def ghi
sh (シェルスクリプト) 2015/01/29
配列ではないが、テキストファイルの一部を抽出するには sed
を使うと簡単。
# 2行目から4行目を抽出(4行目を含む)
cat ファイル名 | sed -n 2,4p
関連
JavaScript 2013/04/20
Array#slice(start[, end])