-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or requestimplementedサンプル実装済みサンプル実装済みrelease-noteリリースノートに反映済みリリースノートに反映済み
Description
配列に対する集合演算
概要
配列型同士の値について、以下の表に示す演算子を導入したい。
| 演算子 | 名前 | 内容 |
|---|---|---|
+ |
結合演算子 | 左の配列の末尾に右の配列を結合した配列 |
- |
差集合演算子 | 左の配列に対する右の配列の差集合 |
| |
和集合演算子 | 左の配列と右の配列の和集合 |
& |
積集合演算子 | 左の配列と右の配列の積集合 |
^ |
対称差集合演算子 | 左の配列と右の配列の対称差 |
ただし、すべての演算子で配列の新しいインスタンスが作られ、結合演算子以外で並び順は保証しない。
いずれの演算子も、以下の形式で定義する。
array op array
動機
集合に対する演算はそこそこ需要がある上、メソッド名が長く使いづらいから。
詳細設計
各演算子の優先順位を以下のように定義する。
| 演算子 | 名前 | 順位 |
|---|---|---|
+ |
結合演算子 | 11 |
- |
差集合演算子 | 11 |
| |
和集合演算子 | 7 |
^ |
対称差集合演算子 | 6 |
& |
積集合演算子 | 5 |
演算子ごとに、次のメソッド呼び出しに展開する。
| 式 | 名前 | 展開先 |
|---|---|---|
ary1 + ary2 |
結合演算子 | ary1.Concat(ary2) |
ary1 - ary2 |
差集合演算子 | ary1.Except(ary2) |
ary1 | ary2 |
和集合演算子 | ary1.Union(ary2) |
ary1 & ary2 |
積集合演算子 | ary1.Intersect(ary2) |
ary1 ^ ary2 |
対称差集合演算子 | ary1.SymDifference(ary2) |
また、ドキュメントの下記の部分を追記する。
欠点
前例
除去演算子
配列に対する除去演算子(-)は、結局右辺が配列以外の時にどうするかを決めあぐねて却下された。
今回の差集合演算子は明確に右辺を配列型のみに決めておくことでうまくいきそう。
未確定の設計
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestimplementedサンプル実装済みサンプル実装済みrelease-noteリリースノートに反映済みリリースノートに反映済み