同じ値で埋めた配列(リスト)を作成するには (fill) 2015/03/27
同じ値を並べた配列(リスト)を作成する方法。
Scala 2015/03/27
Signature:
scala.collection.Seq.fill[A](n: Int)(elem: => A): Seq[A]
scala.collection.Seq.fill[A](n1: Int, n2: Int)(elem: => A): Seq[Seq[A]]
scala.collection.Seq.fill[A](n1: Int, n2: Int, n3: Int)(elem: => A): Seq[Seq[Seq[A]]]
上記はイミュータブル版で、以下のとおりミュータブル版もあるが、単に Seq
と書くとイミュータブル版になる。
Signature:
scala.collection.mutable.Seq.fill[A](n: Int)(elem: => A): scala.collection.mutable.Seq[A]
scala.collection.mutable.Seq.fill[A](n1: Int, n2: Int)(elem: => A): scala.collection.mutable.Seq[scala.collection.mutable.Seq[A]]
scala.collection.mutable.Seq.fill[A](n1: Int, n2: Int, n3: Int)(elem: => A): scala.collection.mutable.Seq[scala.collection.mutable.Seq[scala.collection.mutable.Seq[A]]]
例
println(Seq.fill(3)(1.0));
// => List(1.0, 1.0, 1.0)
値は指定の数の回数だけ評価されるので、呼び出すごとに違う値を返す式を入れれば、違う値の入ったリストになる。
println(Seq.fill(3)(java.lang.Math.random()));
// => List(0.6325425328171801, 0.4376259819974295, 0.48787100947790263)
PHP 2016/07/26
# インデックスが0から始まる、1 が3つの配列を生成
$arr = array_fill(0, 3, 1);
var_export($arr);
# 出力結果
# array (
# 0 => 1,
# 1 => 1,
# 2 => 1,
# )
PHP 5.6 よりも前のバージョンでは2つ目の引数が0だと
PHP Warning: array_fill(): Number of elements must be positive
という警告が出てしまう。
array_fill
関数 | PHP Manual
http://php.net/manual/ja/function.array-fill.php
Python 2014/08/09
例
# 1 が3つの配列を生成
lst = [1] * 3
# 0 が3×3の2次元配列を生成
lst = [[0] * 3 for i in range(3)]
2次元配列など、可変オブジェクトを要素とする配列の場合は注意。
*
演算子は同じオブジェクトの繰り返しなので、どれか1つでも変更したら、全部の要素にそれが反映されてしまう。そうなってほしくない場合は内包表記を使う。
例
lst = [[1, 2, 3]] * 3
print(lst)
# => [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
# lst[0] lst[1], lst[2] は同じオブジェクトなので1つの変更が全部に反映される
lst[0][0] = 10
print(lst)
# => [[10, 2, 3], [10, 2, 3], [10, 2, 3]]
lst = [[1, 2, 3] for i in range(3)]
print(lst)
# => [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
lst[0][0] = 10
print(lst)
# => [[10, 2, 3], [1, 2, 3], [1, 2, 3]]
numpy 2013/10/12
0.0で埋めたNumPyの配列を作るには
import numpy as np
print np.zeros(3)
# => [ 0. 0. 0.]
Ruby / JRuby 2015/01/01
例
# 1 が3つの配列を生成
p [].fill(1, 0, 3)
# => [1, 1, 1]
# または
p Array.new(3, 1);
# => [1, 1, 1]
いずれの方法も要素がコピーされるわけではないので、可変オブジェクトで初期化する際には注意が必要。
Array#fill
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/fill.html
Array.new
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/s/new.html
Perl 2015/03/27
x
演算子を使う。Pythonの*
みたいな使い方だが、記号はアスタリスクではなく、小文字のエックスである。
# 1 が3つの配列を生成
my @arr = (1) x 3;
print "@arr";
# => 1 1 1
x
演算子でオブジェクトがコピーされるのではなく、同じオブジェクトが繰り返されるだけである。つまり要素が配列へのレファレンスの場合に、レファレンス先の配列を変更するとそれはすべてに反映される。
use Data::Dumper;
# 1 が3つの配列が4つある配列を生成
my @arr = ([1, 2, 3]) x 4;
print @$_ foreach @arr;
# 出力結果
# 123123123123
print Dumper \@arr;
# 出力結果
# $VAR1 = [
# [
# 1,
# 2,
# 3
# ],
# $VAR1->[0],
# $VAR1->[0],
# $VAR1->[0]
# ];
$arr[0][0] = 9;
print @$_ foreach @arr;
# 出力結果
# 923923923923
print Dumper \@arr;
# 出力結果
# $VAR1 = [
# [
# 9,
# 2,
# 3
# ],
# $VAR1->[0],
# $VAR1->[0],
# $VAR1->[0]
# ];
乗法演算子 | perldoc.jp
http://perldoc.jp/docs/perl/5.20.1/perlop.pod#Multiplicative32Operators