array型
配列型は、インデックスを使用してアクセスできる変数のリストを表します
定義
名前空間: Alice
アセンブリ: Losetta.dll
配列型は、インデックスを使用してアクセスできる変数のリストを表します。配列型は、関係演算子と配列演算子をサポートしています。 配列型の既定値は空の配列[]
です。この型はnullをとり得ます。この型の型指定修飾子はarray
です。
対応 | |
---|---|
AliceScript | RC1、RC2、GM、2.0、2.1、2.2、2.3、3.0 |
AliceSister | GM、2.0、2.1、2.2、2.3、3.0 |
Losetta | 0.8、0.9、0.10 |
説明
配列は、複数の値をひとまとめに扱うためのアプローチです。 配列は、0個以上の変数を格納することができるオブジェクトとみなすことができます。AliceScriptにおける配列は、CやC++のようなアドレス指定可能な連続メモリ領域ではなく、ヒープに配置される一種のオブジェクトです。 また、配列には別の配列を含むこともできます。このような配列は多次元配列やジャグ配列と呼ばれます。 配列は配列式を使って初期化します。次の例をご覧ください。
次の例では、基本的な配列の使用方法を説明しています。
// 配列を定義する
// [1,1,2,3,5]
var ary = [1,1,2,3,5];
// 配列内の要素の個数=配列の長さを取得する
print($"配列の長さは{ary.Length}個");
// 出力: 配列の長さは5個
// 配列に要素を追加する
// [1,1,2,3,5,8]
ary.Add(8);
// 配列の長さがひとつ増えたことを確認
print($"配列の長さは{ary.Length}個");
// 出力: 配列の長さは6個
// 配列内に1が含まれているか確認する
if(ary.Contains(1))
{
print("配列には、1が含まれています");
}
// 出力: 配列には、1が含まれています
// 配列内の2を削除する
// [1,1,3,5,8]
ary.Remove(2);
// 配列内のすべての要素を削除する
// []
ary.Clear();
// 配列に要素をまとめて追加
// [3,1,2,4]
ary.Add(3,1,2,4);
// 配列内の要素についてひとつずつ取得する
foreach(var item in ary)
{
write($"{item}, ");
}
// 出力: 3, 1, 2, 4
// これも同じ意味
ary.Foreach(item => write($"{item}, "));
// 配列を昇順に並べ替え
// [1,2,3,4]
ary.Sort();
// 配列の順序を反転
// [4,3,2,1]
ary.Reverse();
// 配列の先頭の要素を取得
print(ary.First);
// 出力: 4
// 配列の最後の要素を取得
print(ary.Last);
// 出力: 1
現在配列に存在する要素の個数を取得するには、Lengthプロパティを使用します。
配列に要素を追加するには、Addメソッドを使用します。また、別の配列の要素を現在の配列に追加するためにAddRangeメソッドを使用することもできます。 配列に要素を追加した後、配列の長さが増えていることにご注目ください。
配列に特定の要素が含まれているかを調べるには、Containsメソッドを使用します。
配列内から特定の要素を削除するには、Removeメソッドを使用します。また、Clearメソッドを使用することで、配列内のすべての要素を削除できます。
配列内の要素をひとつずつ取得して処理するには、Foreach文を使用するか、Foreachメソッドを使用します。
配列を昇順に並べ替えるには、Sortメソッドを使用します。また、配列の並び順を反転するには、Reverseメソッドを使用します。
Firstプロパティを使用して、配列の並び順で先頭の要素を取得します。 同様に、Lastプロパティを使用することで、並び順の最後の要素を取得します。
using Alice.Math;
var ary2 = [1,2,3,4,5,6];
// 配列から素数だけを取得
var primes = ary2.Where(x => math_isPrime(x));
// 配列の要素の2の倍数の配列を作成
var evens = ary2.Select(x => x * 2);
if(ary2.All(x => x > 0))
{
print("配列内の要素はすべて正の数でした");
}
Whereメソッドを使用することで、配列から特定の条件に一致する要素のみを含めた新しい配列を取得できます。また、Selectメソッドを使用することで、配列のそれぞれの要素に対して何らかの操作をし、その結果を含めた新しい配列を作成できます。
配列内の要素がすべて条件を満たすかどうかを判定するには、Allメソッドを使用します。
統計処理
配列に処理したい値を格納することで、簡単に統計情報を取得できます。 以下のコードをご覧ください。
// 処理したいデータ
array data = [8, 9, 6, 11, 3, 10, 8, 9];
number max = data.Max();
number min = data.Min();
print($"データの最大値は {max} です");
print($"データの最小値は {min} です");
number mean = data.Mean();
number median = data.Median();
number mode = data.Mode();
print($"データの平均値は {mean} です");
print($"データの中央値は {median} です");
print($"データの最頻値は {mode} です");
number variance = data.Variance();
number stdDev = data.StdDev();
print($"データの分散は {variance} です");
print($"データの標準偏差は {stdDev} です");
独自の拡張を作ることで、標準誤差も計算できます。
using Alice.Math;
namespace MyExtension;
public number StdError(this array data)
{
// 数値型のみ計算に入れる
data = data.OfType(number);
// 標準誤差の計算
return data.StdDev() / math_sqrt(data.Length);
}
number error = data.StdError();
print($"データの標準誤差は {error} です");
型の一意性
配列型は、その初期化時に配列に含むことのできる変数の型を指定できます。型を指定するには、次のように配列を宣言します。
デフォルトでは、配列型は必ずしも要素を含む必要も、同一の型である必要もありません。配列型への暗黙的な変換はサポートされていません。 その問題から、バイト配列を表すbytes型は別に定義されています。明示的な変換を行うとき、その値を唯一の要素とする配列型に変換されます。
プロパティ
First | 現在の配列の最初の要素を表します |
Last | 現在の配列の最後の要素を表します |
Length | 現在の配列にある要素の数を表します |
メソッド
Add(variable) | 現在の配列の末尾に値を追加します |
AddRange(params variable) | 現在の配列の末尾にその配列に含まれるすべての要素を追加します |
All(delegate) | 現在の配列に含まれるすべての要素が条件を満たしているかどうか判定します |
Any(delegate) | 現在の配列に含まれるいずれかの要素が条件を満たしているかどうか判定します |
BinarySearch(variable) | ソート済みの配列に対して、二分探索を使用して指定された要素を検索します。 |
Chunk(number) | 現在の配列を指定した要素数ごとに分割した新しい配列を取得します。 |
Clear() | 現在の配列からすべての要素を削除します |
Contains(variable) | 現在の配列内に指定された値が存在するかを示す値を取得します |
Distinct() | 現在の配列内から重複する要素を除いた新しい配列を取得します |
Except(array) | 現在の配列と指定された配列の差集合を取得します |
Exists(delegate) | 現在の配列に、指定された条件と一致する要素が含まれているかを判断します。 |
Find(delegate) | 現在の配列から指定された条件と一致する要素を検索し、初めに見つかった要素を返します。 |
FindAll(delegate) | 現在の配列から指定された条件と一致する要素をすべて取得します。 |
FindLast(delegate) | 現在の配列から指定された条件と一致する要素を検索し、末尾から最も近い要素を返します。 |
Flatten() | 現在の配列内にある配列型の要素を、現在の配列が存在する場所に置き換え、配列を平坦化します |
Foreach(delegate) | 現在の配列の各要素について、指定されたデリゲートを実行します |
IndexOf(variable,number) | 指定された値が現在の配列内で最初に見つかった位置のインデックスを返します |
Insert(number,variable) | 現在の配列内の指定したインデックスにその値を挿入します |
InsertRange(number,array) | 現在の配列内の指定したインデックスに配列に含まれるすべての要素を追加します |
Intersect(array) | 現在の配列と指定された配列の積集合を取得します |
Max() | 現在の配列内の要素の最大値を取得します。 |
Max(delegate) | 現在の配列内の各要素にある値を用いて、その最大値を取得します。 |
Mean() | 現在の配列内の各要素の平均値を取得します。 |
Mean(delegate) | 現在の配列内の各要素にある値を用いて、平均値を取得します。 |
Median() | 現在の配列内の各要素の中央値を取得します。 |
Median(delegate) | 現在の配列内の各要素にある値を用いて、中央値を取得します。 |
Merge(params variable) | 現在の配列の末尾に値を追加した新しい配列を返します |
Merge(params array) | 現在の配列の末尾に配列を結合した新しい配列を返します。 |
Min() | 現在の配列内の要素の最小値を取得します。 |
Min(delegate) | 現在の配列内の各要素にある値を用いて、その最小値を取得します。 |
Mode() | 現在の配列内の各要素の最貧値を取得します。 |
Mode(delegate) | 現在の配列内の各要素にある値を用いて、最頻値値を取得します。 |
OfType(Type) | 現在の配列から指定された型の要素のみを取り出します |
OrderBy() | 現在の配列の要素を並び替えた新しい配列を取得します。 |
OrderBy(delegate) | 現在の配列内の各要素にある値を用いて、現在の配列の要素を昇順で並べ替えます。 |
OrderByDescending() | 現在の配列の要素を降順で並べ替えます |
Remove(params variable) | 現在の配列から指定された値を削除します |
RemoveAt(number) | 現在の配列の指定したインデックスにある値を削除します |
RemoveRange(array) | 現在の配列から指定された配列に含まれるすべての値を削除します |
Repeat(number) | 現在の配列を指定回数繰り返した新しい配列を取得します |
Reverse() | 現在の配列の要素の順序を反転させます |
Reverse(number,number) | 現在の配列内の指定した範囲の要素の順序を反転させます |
Select(selector) | 現在の配列の各要素を新しい配列に射影します |
SequenceEqual(array) | 現在の配列ともう一方の配列の要素が等しいかどうかを判定します |
Size() | 現在の配列にある要素の数を取得します |
Skip(number) | 現在の配列内の先頭から指定された数の要素を取り除いた配列を取得します |
SkipLast(number) | 現在の配列内の末尾から指定された数の要素を取り除いた配列を取得します |
SkipWhile(delegate) | 現在の配列内の先頭から指定された条件を満たす間要素を除いた配列を取得します |
Slice(number) | 現在の配列内の、指定された場所以降の要素の簡易コピーを作成します。 |
Slice(Range) | 現在の配列内の、Rangeオブジェクトで指定された範囲の要素の簡易コピーを作成します。 |
Slice(number,number) | 現在の配列内の、指定された範囲の要素の簡易コピーを作成します。 |
Sort() | 現在の配列の要素の順序を並び替えます |
Sort(delegate) | 現在の配列の要素の順序を、指定した並べ替え規則を使用して並び替えます |
Sort(number,number) | 現在の配列内の指定した範囲の要素の順序を並び替えます |
StdDev(bool) | 現在の配列内の要素の標準偏差を取得します。 |
StdDev(delegate,bool) | 現在の配列内の各要素にある値を用いて、標準偏差を取得します。 |
Sum() | 現在の配列内の各要素の合計を取得します。 |
Sum(delegate) | 現在の配列内の各要素にある値を用いて、その合計を取得します。 |
Take(number) | 現在の配列内の先頭から指定された個数の要素を取得します |
TakeWhile(delegate) | 現在の配列内の先頭から指定された条件を満たす間の要素を取得します |
Union(array) | 現在の配列と指定された配列の和集合を取得します |
Variance(bool) | 現在の配列内の要素の分散を取得します。 |
Variance(delegate,bool) | 現在の配列内の各要素にある値を用いて、分散を取得します。 |
Where(delegate) | 現在の配列から指定された条件に一致する要素のみを取り出します |