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

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

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

*関連メモ*
[python ジャンプスタート](https://qiita.com/0x20FE/items/6f8b6d893b9c5c197c5b)
*C,perl,PHP. JavaScript,Scilab,VHDL,pythonの比較*
 [配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
   [関数とオブジェクトの書き方メモ](https://qiita.com/0x20FE/items/02e2a6d8380851272a2c)
  [Scilab,NumPy,R行列処理の比較](https://qiita.com/0x20FE/items/75622186ba8a0c6086ce)



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

基数が０の処理系で順番に処理するなら、ループ変数うの初期値は０、終了は`ループ変数＜項目数`。
逆順に処理する場合、初期値は項目数−１、終了は`ループ変数=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 *<br>std::size()|int a[]={1,2,3};<br>for(i=0;i&lt;N;i++){//SaitoAtsushiさんのコメント参照<br>&nbsp;&nbsp;aDat[i];<br>}|
|C++,STL|0|aDat.size()|std::vector&lt;int&gt; aDat;<br>typedef std::vector&lt;int&gt;::iterator it;<br>for(it=aDat.begin();it != aDat.end();++it){<br>&nbsp;&nbsp;*it;<br>}
|perl|0|$#aDat+1|＄aDat=(1,2,3);<br>for(＄i=0;＄i&lt;＄#aDat+1;＄i++){# ＄#変数名は項目数-1 <br>&nbsp;&nbsp;aDat[i];<br>}|
|PHP|0|count($aDat)|for(＄i=0;＄i &lt; count(＄aDat);＄i++){<br>&nbsp;&nbsp;aDat[i];<br>}|
|JavaScript|0|aDat.length|var aDat=[1,2,3];<br>for(var i=0;i &lt; aDat.length; i++){<br>&nbsp;&nbsp;aDat[i];<br>}|
|SciLab|1|length(aDat)|aDat=[1 2 3];<br>for i=1:length(aDat),aDat(i),end;|
|numPy|0|len(aDat) <br># **|aDat=np.array([1,2,3])<br>for i in range(len(aDat)):<br>&nbsp;&nbsp;aDat[i]|
|R|||for(i in 1:N){<br>}|
|VHDL|-||G_FOO: for i in 0 to 7 generate<br>&nbsp;&nbsp;G_XX:XX prot map(I =&gt;X(i));<br>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){<br>}|%hDat=("a"=>1,"b"=>2);<br>foreach my ＄key (keys %hDat){<br>&nbsp;&nbsp;＄hDat{＄key};<br>}|
|PHP|＄aDat=array("a","b","c");<br>foreach (＄aDat as ＄item){<br>}|＄hDat=array("a"=>1,"b"=>2);<br>foreach (＄hDat as ＄key =>＄item){<br>}|
|JavaScript|var aDat=[1,2,3];<br>aDat.forEach(function(item){<br>&nbsp;&nbsp;item<br>});|var hDat={"a":1, "b":2, "c":3};<br>Object.keys(hDat),forEach(function(key){<br>&nbsp;&nbsp;this[key];<br>},hDat);|
|SciLab|for item=[1,5,7]<br>&nbsp;&nbsp;item;<br>end|なし|
|python|aDat=["a","b","c"]<br>for item in aDat:<br>&nbsp;&nbsp;item|||
|R|library(foreach)<br>x<=foreach(i=1:4) %do% 処理(i)|||
|VHDL|なし|なし|

<!-- |C,C++|int aDat[N],item;<br><br>for(i=0;i&lt;N;i++){<br>&nbsp;&nbsp;item=aDat[i];<br>}|なし|
 -->

##文字列処理
|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)<br>注：開始,長さを指定|explode(",","a,b,c")|implode(("a","b","c"))|
|SciLab|A + B|strcmp(a,"abc")|length("abc")|part("abc de f",5:6)<br>注：開始:終了位置を指定<br>訂正: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)<br>注：終了位置を指定|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を動かすまで](https://qiita.com/0x20FE/items/2ba5e60685816485ea4c)
[SciNoteのオートコンプリートをとめたい](https://qiita.com/0x20FE/items/cb17fda3f7456a807d41)

*実践*
[SciLabでCSV読み込み](https://qiita.com/0x20FE/items/dd6cbf94be0f2c20d002)
[SciLabでGUIを使ってみる](https://qiita.com/0x20FE/items/cf9cdad0e4be88714118)
[Mac/Windows共用scilabスクリプト]()未公開
[SciLabでフィルタを適用する]()未公開
[プロットメモ]()未公開
[プロットあれこれ]()未公開

*他の言語と比較・書き換え*
[Scilab (NumPy) - plotの書き方](https://qiita.com/0x20FE/items/311ac0e61a129e6a01fa)
 [配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
   [関数とオブジェクトの書き方メモ](https://qiita.com/0x20FE/items/02e2a6d8380851272a2c)
  [Scilab,NumPy,R行列処理の比較](https://qiita.com/0x20FE/items/75622186ba8a0c6086ce)