配列(リスト)から先頭のn個のみを配列で取得するには 2021/03/02
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 2021/03/02
def Seq[A]#take(n: Int): Seq[A]
結果を新しいリストで返し、自身は変更しない。
もともと要素がn
個よりも少ない場合はそのまま返し、エラーにはならない。
PHP 2016/11/27
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
個よりも少ない場合はそのまま返し、エラーにはならない。
Perl 2021/03/02
splice
で先頭のn個の配列に書き換える。
use Data::Dumper;
my @arr = qw/abc def ghi/;
splice(@arr, 2);
print Dumper \@arr;
# $VAR1 = [
# 'abc',
# 'def'
# ];
別の方法:
配列の変数名の先頭の@
を$#
にすると、その配列の最後のインデックスを取得するが、代入することもできる。配列を小さくしたければ、小さくした結果の最後のインデックス(サイズより1小さい値)を代入すれば配列のサイズが縮小され、後ろは破棄される。
use Data::Dumper;
my @arr = qw/abc def ghi/;
$#arr = 1; # 最後のインデックスを1にするということは、要素数を2にするということ
print Dumper \@arr;
# $VAR1 = [
# 'abc',
# 'def'
# ];
Go言語 (golang) 2016/11/27
配列もスライスも [: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 2015/01/03
スライスを使うか、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 リファレンスマニュアル
sh (シェルスクリプト) 2015/01/29
配列ではないが、テキストファイルに関して、先頭のn行だけを標準出力させる例 (head
コマンド)
# 最初の3行を出力
head -n3 foo.txt
# または
cat foo.txt | head -n3
関連
1個 | n個 | |
最初の○○以外の要素を取得するには | tail | drop |
最初の○○の要素を取得するには | head | take |
最後の○○の要素を取得するには | last |