LoginSignup
2
0

More than 3 years have passed since last update.

配列と文字列処理(C,C++,STL,perl,PHP,JavaScript,python,R,sciLab)

Last updated at Posted at 2017-12-19

大量のデータを計算するには配列処理は必須です。
しかし、プログラム言語によって記述方法に微妙な違いがあるのが間違いのもと。

ゆるゆる更新していきます。

関連メモ
python ジャンプスタート
C,perl,PHP. JavaScript,Scilab,VHDL,pythonの比較
配列と文字列処理の比較
関数とオブジェクトの書き方メモ
Scilab,NumPy,R行列処理の比較

for文

配列(aDat)を順番にitemに取り出す繰り返し処理で比較します。

基数が0の処理系で順番に処理するなら、ループ変数うの初期値は0、終了はループ変数<項目数
逆順に処理する場合、初期値は項目数−1、終了はループ変数=0

このループ処理のわずわらしさは、STL(Standard Templete Language)では、抽象化されたポインタ(イテレータ)操作で統一化されている。イテレータの初期値はit=aDat.begin()、終了条件はit!=aDat.end()とする。逆順で処理する場合はreverse iteratorを用いる。STLではデータ集合はコンテナに抽象化され、配列、キュー、リスト、集合のソフト部品が用意されている。

SciLab,numPy,Rでは、できるだけforループは使わず、ベクトル処理を利用する。

Lang 基数 項目数 for
C,C++ 0 //C++17 *
std::size()
int a[]={1,2,3};
for(i=0;i<N;i++){//SaitoAtsushiさんのコメント参照
  aDat[i];
}
C++,STL 0 aDat.size() std::vector<int> aDat;
typedef std::vector<int>::iterator it;
for(it=aDat.begin();it != aDat.end();++it){
  *it;
}
perl 0 $#aDat+1 $aDat=(1,2,3);
for($i=0;$i<$#aDat+1;$i++){# $#変数名は項目数-1
  aDat[i];
}
PHP 0 count($aDat) for($i=0;$i < count($aDat);$i++){
  aDat[i];
}
JavaScript 0 aDat.length var aDat=[1,2,3];
for(var i=0;i < aDat.length; i++){
  aDat[i];
}
SciLab 1 length(aDat) aDat=[1 2 3];
for i=1:length(aDat),aDat(i),end;
numPy 0 len(aDat)
# **
aDat=np.array([1,2,3])
for i in range(len(aDat)):
  aDat[i]
R for(i in 1:N){
}
VHDL - G_FOO: for i in 0 to 7 generate
  G_XX:XX prot map(I =>X(i));
end generate;
  • SaitoAtsushiさんより

** shiracamusさんより

foreach

配列(aDat)を順番にitemに取り出す

Rのforeachは、他と大きくことなり、処理にループ変数を割り当て、結果をリストで返す(%do%)。%dopar%を指定すると並列処理を行う。

Lang for each リスト for each 連想配列
Bone Shell for item in val1 val2;do echo $item; done
perl foreach my $item (@aDat){
}
%hDat=("a"=>1,"b"=>2);
foreach my $key (keys %hDat){
  $hDat{$key};
}
PHP $aDat=array("a","b","c");
foreach ($aDat as $item){
}
$hDat=array("a"=>1,"b"=>2);
foreach ($hDat as $key =>$item){
}
JavaScript var aDat=[1,2,3];
aDat.forEach(function(item){
  item
});
var hDat={"a":1, "b":2, "c":3};
Object.keys(hDat),forEach(function(key){
  this[key];
},hDat);
SciLab for item=[1,5,7]
  item;
end
なし
python aDat=["a","b","c"]
for item in aDat:
  item
R library(foreach)
x<=foreach(i=1:4) %do% 処理(i)
VHDL なし なし

文字列処理

Lang 結合 比較 長さ 切り出し 配列への分割 配列結合
入力 "A","B" 変数,定数 "abc" "abc de f" "a,b,c" "a","b","c"
結果 "AB" 論理値 3 "de" "a","b","c" "a,b,c"
perl $A.$B $A eq "abc" length "abc" substr($A,4,2) split(/,/,"a,b,c") join(',',"a","b","c")
PHP $A.$B strcmp($A,"abc")==0 strlen($A) substr($A,4,2)
注:開始,長さを指定
explode(",","a,b,c") implode(("a","b","c"))
SciLab A + B strcmp(a,"abc") length("abc") part("abc de f",5:6)
注:開始:終了位置を指定
訂正:4:6-->5:6
strsplit("1,2,3",","); strcat(["a","b","c"],",");
python + == len('abc') str[2:3] a.split(',') string.join(a,",")
R paste("A","B") nchar("abc") substr("abcde",2,4)
注:終了位置を指定
strsplit("a,b,c",",") paste("a","b","c",sep=",")
JavaScript + === "abc".length() "abc".substring(1,2) "1,2,3".split(",")
excel "A"&"B"

SciLab関連ドキュメントリンク

install
macOSでSciLabを動かすまで
SciNoteのオートコンプリートをとめたい

実践
SciLabでCSV読み込み
SciLabでGUIを使ってみる

Mac/Windows共用scilabスクリプト未公開
SciLabでフィルタを適用する未公開
プロットメモ未公開
プロットあれこれ未公開

他の言語と比較・書き換え
Scilab (NumPy) - plotの書き方
配列と文字列処理の比較
関数とオブジェクトの書き方メモ
Scilab,NumPy,R行列処理の比較

2
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0