2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

配列と文字列処理(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の比較
[配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
関数とオブジェクトの書き方メモ
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の書き方
[配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
関数とオブジェクトの書き方メモ
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?