Help us understand the problem. What is going on with this article?

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

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

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

関連メモ
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"
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした