コレクションAPI
サマリ
table:Array
配列のマージ .concat() + operator
配列への追加 .push() << operator
配列のループ処理 .forEach() .each / .each.with_index
配列の作成 .map() .map / .map! .ConvertAll()
配列の絞り込み(1件のみ) .find() .Find()
配列の絞り込み(複数件) .filter() .select / .select! .FindAll()
配列を連結した文字列の作成 .join() .join implode()
配列内に要素があるか .includes() .include? .Contains
上記のテスト関数版 .some() .any?
入れ子の配列を展開 .flat() .flatten
順次計算(?) .reduce() .inject
*1 !付きは副作用版あり
table:Array
.sort() 引数a, bを取り両者を比較する関数を与えてソートする。-1でaが先、1でbが先、0で同じ
.flatMap() array.map().flat()と同じ。やや性能が良い
.splice() 挿入、差し替え、削除
spliceサンプル
挿入 months.splice(1, 0, 'Feb');
差替え months.splice(4, 1, 'May');
削除 array.splice(1, 2); // 二番目から二つ削除
スプレッド構文
array = array.concat(["hoge"]) と array = [...array, "hoge"] は等価
個人的にはあまり好きじゃない・・・
table:Array
%wfirst second ... %記法による配列の宣言
.reject ! falseを返した要素で配列を作成(.selectの逆)
.zip 互い違いに配列を結合 [1,2,3].zip([4,5,6]) #=> [1,4,2,5,3,6]
.to_h ハッシュ化。キー配列、値配列からハッシュの作成は [1,2,3].zip([4,5,6]).to_h # => { 1=>4, 2=>5, 3=>6 }
.uniq ! 重複削除。純粋な配列では無い(子がある)場合はブロックを入れる
.compact ! nil削除。
.product 配列同士の組み合わせを網羅 arr = [1,2].product([3,4]) # => [[1, 3], [1, 4], [2, 3], [2, 4]]
.transpose 2次元配列を行列に見立てて、行と列を入れ替える
Model.where(name: pgr).index_by(&:sort)
code:transpose sample
p arr.transpose # => 1, 4], 2, 5, [3, 6 code:Rangeを使った配列の切り出し
副作用関数(!付き)は、変更が無かった場合nilが帰ってくる
.flatten! .uniq! .reject! で発生した事がある
Array使用時はSystem.Array(targets, function)のように書く
配列の文字列化
string.Join("連結文字", 連結配列)
code:初期化いろいろ
class Sample {
public string item1;
public string item2;
};
var object = new Sample(){
item1 = "hoge",
item2 = "fuga"
};
var array = new string[]{"hoge", "fuga"};
var object_array = new Sample[]{
new Sample(){item1="hoge", item2="fuga"},
new Sample(){item1="piyo", item3="poyo"}
};
var dictionary = new Dictionary<string, Sample>(){
{"key", new Sample(){item1="hoge", item2="fuga"}}
};
(動的な)コレクションAPIとしては、ArrayList, List, Hashtable, Dictionaryがある
explode(',', 'hoge, fuga'); 文字列を配列に
順次計算について
サンプル
code:rb
# 合計の計算
p(1..100).to_a.inject do |memo, item|
memo + item
end
# 階乗の計算
p (1..100).to_a.inject do |memo, item|
memo * item
end
用途としては最大値の検索とか良く使いそう
code:js
let max = 0;
for(let i=0; i < list.length; i++){
if(max < listi) max = listi; }
console.log(max); // 245
var max2 = list.reduce((max, val)=>{
if(max < val) return val;
else return max;
});
console.log(max2); // 245
参考
コレクションAPIの命名についての考察