Skip to content

[PROPOSE]:配列に対する集合演算 #17

@taiseiue

Description

@taiseiue

配列に対する集合演算

概要

配列型同士の値について、以下の表に示す演算子を導入したい。

演算子 名前 内容
+ 結合演算子 左の配列の末尾に右の配列を結合した配列
- 差集合演算子 左の配列に対する右の配列の差集合
| 和集合演算子 左の配列と右の配列の和集合
& 積集合演算子 左の配列と右の配列の積集合
^ 対称差集合演算子 左の配列と右の配列の対称差

ただし、すべての演算子で配列の新しいインスタンスが作られ、結合演算子以外で並び順は保証しない。

いずれの演算子も、以下の形式で定義する。

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 requestimplementedサンプル実装済みrelease-noteリリースノートに反映済み

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions