> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# arc:enum

> アイテムのアトリビュート、区切りリスト、値の範囲、または複数値のアトリビュートの値を反復し、エレメントごとにボディを実行します。

export const siteNameShort = "Arc";

`arc:enum` キーワードを使用して、アイテム内のアトリビュート、区切りリスト、指定された値の範囲、または複数値のアトリビュートの値を列挙します。`arc:enum` のボディは、反復されるセットのエレメントごとに実行されます。

## パラメータ

* **item**：アトリビュートを反復するアイテムの名前。
* **attr**：どのアトリビュートを反復するかを指定する、マッチするエクスプレッション。例えば、`arc:*` です。このパラメータを指定して、複数値のパラメータの値を反復することもできます。
* **prefix**：アイテムが列挙される基になる接頭辞。
* **expand**：複数値のアトリビュートが検出された場合に、どのように`arc:enum` が挙動するかを指定するboolean 値。expand が`true` に設定されている場合、`arc:enum` のボディはアトリビュートのそれぞれの値につき一度づつ実行されます。`false` の場合、すべての値は1つの文字列値として結合され、一度の反復が実行されます。デフォルトで、`arc:enum` はすべての値をexpand しません。
* **sep\[arator]**：**expand** パラメータが`false` の場合に、複数値のアトリビュートの値を結合させるために使われるセパレータ。このパラメータは、listseparator が定義されていない場合にリストの値をトークン化するためにも使われます。デフォルト値は改行文字（`\n`）です。
* **list**：列挙する区切られた値のリスト。例えば、値のリストが`violet, indigo, blue, green, yellow, orange, red` で、セパレータがカンマ（`,`）の場合、`arc:enum` のスコープは虹の色ごとに実行されます。
* **range**：昇順、降順で列挙される数字もしくは文字の範囲。例えば、`a..z` や`Z..A` です。

<Note>**range** または**item** パラメータのいずれかを指定できますが、両方指定することはできません。アトリビュートは、アルファベット順に列挙されます。</Note>

## アトリビュートの制御

* **\_attr**：反復されるアトリビュートの名前。複数値のアトリビュートの値を反復している場合、名前の一部としてindex を持つ以外はアトリビュート名は同じです。Index は、ハッシュ記号（`#`）で名前と区別されます。例えば、`name#1`、`name#2`、などです。
* **\_index**：アイテムでアトリビュートが出現するindex、もしくはリストエレメントが現在列挙されている位置。
* **\_value**：反復されるアトリビュートの値。複数値のアトリビュートでは、**expand** および**separator** 設定は、\_value が1つのアトリビュート値の参照なのか、すべてのアトリビュート値の参照なのかを決定します。
* **\_count**：アトリビュート内またはリスト内の値の数。
* **\_separator**：リスト内の値を区切るセパレータ。

## 例

`input` と名付けられたアイテムのアトリビュート名とアトリビュート値を表示します：

```xml theme={null}
<arc:set item="input" attr="Greeting" value="Hello" />
<arc:set item="input" attr="Goodbye" value="See ya" />
<arc:enum item="input">
  [_attr] is [_value]
  <br/>
</arc:enum> 
```

```
goodbye is See ya greeting is Hello
```

値のリストを列挙するには、**list** および**separator** パラメータを使用します。例えば、次のコードは`colors` アトリビュートで指定された色をリストします：

```xml theme={null}
<arc:set attr="colors" value="violet, indigo, blue, green, yellow, orange, red"/>
<arc:enum list="[colors]" separator=",">
  [_value] 
</arc:enum>
```

値の範囲を列挙するには、**range** パラメータを使用します。この例では、`a からz`、`Z からA` までの文字セットと、`1 から25` までの数字をリストします：

```xml theme={null}
<arc:enum range="a..z">
  [_value] 
</arc:enum>
<arc:enum range="Z..A">
  [_value] 
</arc:enum>
<arc:enum range="1..25">
  [_value] 
</arc:enum>
```

複数値のアトリビュートの値すべてを列挙するには、**\_attr** コントロールアトリビュートを使用して複数値のアトリビュートを指定し、**expand** パラメータを`true` に設定します：

```xml theme={null}
<arc:set attr="foo.email#1" value="joe@mycompany.com"/>
<arc:set attr="foo.email#2" value="john@mycompany.com"/>
<arc:enum attr="foo.email" expand="true">
    ([_index]) [_attr] -> [_value]
</arc:enum>
```

上の例では、次のアウトプットが得られます：

```
(1) email#1 -> joe@mycompany.com (2) email#2 -> john@mycompany.com
```

## 関連項目

* [arc:break](./op-arc-break)：[arc:call](./op-arc-call) または`arc:enum` の反復を終了する。
* [arc:continue](./op-arc-continue)：[arc:call](./op-arc-call) または`arc:enum` の反復をスキップする。
* [arc:first](./op-arc-first)：最初の反復で特別な処理を行う。
* [arc:last](./op-arc-last)：最後の反復で特別な処理を行う。
