mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 12:24:45 +00:00
60 lines
1.9 KiB
Markdown
60 lines
1.9 KiB
Markdown
# 配列
|
|
|
|
[](https://gezf7g7pd5.execute-api.ap-northeast-1.amazonaws.com/default/source_up_to_date?owner=erg-lang&repos=erg&ref=main&path=doc/EN/syntax/10_array.md&commit_hash=603abbd5fa3f8baffe0d614758e1a554705e6732)
|
|
|
|
配列はもっとも基本的な __コレクション(集約)__ です。
|
|
コレクションとは、内部にオブジェクトを複数保持できるオブジェクトのことです。
|
|
|
|
```python
|
|
a = [1, 2, 3]
|
|
a: [Int; 3] # 型指定: セミコロンの後の数字は要素数
|
|
# 要素数がわからない場合は省略できる
|
|
a: [Int]
|
|
|
|
mut_a = [!1, !2, !3]
|
|
mut_a[0].inc!()
|
|
assert mut_a == [2, 2, 3]
|
|
```
|
|
|
|
配列には、原則として違う型のオブジェクトを入れることはできません。
|
|
|
|
```python,compile_fail
|
|
[1, "a"] # TypeError: 1st element is Int, but 2nd element is Str
|
|
```
|
|
|
|
しかし、このように要素の型を明示的に指定すると制限を回避できます。
|
|
|
|
```python
|
|
[1: Int or Str, "a"]
|
|
```
|
|
|
|
> しかしこのような場合、基本的には後述する __タプル__ を使うべきです。
|
|
>
|
|
> ```python
|
|
> (1, "a")
|
|
> ```
|
|
|
|
## スライス
|
|
|
|
配列は、複数の値をまとめて取り出すこともできます。これをスライスと呼びます。
|
|
|
|
```python
|
|
l = [1, 2, 3, 4]
|
|
# Pythonのl[1:3]に相当
|
|
assert l[1..<3] == [2, 3]
|
|
assert l[1..2] == [2, 3]
|
|
# l[1]と同じ
|
|
assert l[1..1] == [2]
|
|
# Pythonのl[::2]に相当
|
|
assert l[..].step(2) == [2, 4]
|
|
```
|
|
|
|
スライスで得られるオブジェクトは配列の(不変)参照です。
|
|
|
|
```python
|
|
print! Typeof l[1..2] # Ref [Int; 4]
|
|
```
|
|
|
|
<p align='center'>
|
|
<a href='./09_builtin_procs.md'>Previous</a> | <a href='./11_dict.md'>Next</a>
|
|
</p>
|