配列(リスト)から先頭のn個のみを配列で取得するには

Scala、PHP、Perl、Go言語、Rubyでの配列(リスト)から先頭のn個の要素のみを配列で取得する方法。

Scala seq.take(n)
PHP array_slice($arr, 0, $n)
Perl splice(@arr, $n) ※in-place
Go言語 arr[:n]
Ruby arr.first(n)

Scala

def Seq[A]#take(n: Int): Seq[A]

結果を新しいリストで返し、自身は変更しない。

もともと要素がn個よりも少ない場合はそのまま返し、エラーにはならない。

PHP

array_slice($arr, 0, $n) のようにする。

$arr = array(10, 20, 30, 40, 50);

$n = 3;

var_export(array_slice($arr, 0, $n));

// 出力結果
// array (
//   0 => 10,
//   1 => 20,
//   2 => 30,
// )

array_slice は結果を新しい配列で返し、引数の配列を変更しない。

もともと要素が$n個よりも少ない場合はそのまま返し、エラーにはならない。

array_slice 関数 | PHP Manual

Perl

spliceで先頭のn個の配列に書き換える。

use Data::Dumper;

my @arr = qw/abc def ghi/;
splice(@arr, 2);

print Dumper \@arr;
# $VAR1 = [
#           'abc',
#           'def'
#         ];

splice - Perldoc Browser

別の方法:

配列の変数名の先頭の@$#にすると、その配列の最後のインデックスを取得するが、代入することもできる。配列を小さくしたければ、小さくした結果の最後のインデックス(サイズより1小さい値)を代入すれば配列のサイズが縮小され、後ろは破棄される。

use Data::Dumper;

my @arr = qw/abc def ghi/;
$#arr = 1; # 最後のインデックスを1にするということは、要素数を2にするということ

print Dumper \@arr;
# $VAR1 = [
#           'abc',
#           'def'
#         ];

Go言語 (golang)

配列もスライスも [:n] というスライス表記で先頭からn個の要素のスライスを取得することができる。配列であってもスライスになる。

arr := [...]int{10, 20, 30, 40, 50} // (配列)
fmt.Printf("%#v\n", arr[:n])
// => []int{10, 20, 30}                (スライス)

sl := []int{10, 20, 30, 40, 50}     // (スライス)
fmt.Printf("%#v\n", sl[:n])
// => []int{10, 20, 30}                (スライス)

Ruby

スライスを使うか、Array#first というメソッドを使う。

arr = [10, 20, 30, 40, 50]

n = 3

p arr.slice(0, n)
p arr[0, n]
p arr.first(n)
# => [10, 20, 30]

first は引数を付けないと配列の先頭の要素を取得するが、引数を与えると先頭からその数だけ要素を抜き出した配列を取得できる。

arr = [10, 20, 30, 40, 50]

p arr.first
# => 10
p arr.first(1)
# => [10]
p arr.first(3)
# => [10, 20, 30]

Array#[] | Ruby 2.1 リファレンスマニュアル

Array#slice | Ruby 2.1 リファレンスマニュアル

Array#first| Ruby 2.1 リファレンスマニュアル

sh (シェルスクリプト)

配列ではないが、テキストファイルに関して、先頭のn行だけを標準出力させる例 (headコマンド)

# 最初の3行を出力
head -n3 foo.txt
# または
cat foo.txt | head -n3

関連

1個 n個
最初の○○以外の要素を取得するには tail drop
最初の○○の要素を取得するには head take
最後の○○の要素を取得するには last
このサイトは個人メモの集合です。
スポンサーリンク