MRが楽しい

MRやVRについて学習したことを書き残す

C#でEnumerableを使って数値配列の積集合または和集合を求める

本日はC#の小ネタ枠です。
C#でEnumerableを使って数値配列の積集合または和集合を求める方法です。

積集合/和集合

積集合と和集合は集合の関係を表す定義です。
2つの集合が存在するとき、「両方に含まれる要素」の集合が積集合、「少なくとも片方に含まれる要素」の集合が和集合になります。

2つの集合


積集合


和集合


Enumerable.Intersect/Enumerable.Union

Enumerable.IntersectまたはEnumerable.Unionを使って2つのシーケンスから積集合または和集合を求めることができます。
Enumerable.Intersectは2つのシーケンスの積集合を生成します。
learn.microsoft.com

int[] intArray1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] intArray2 = { 8, 3, 6, 4, 4, 9, 1, 0 };
IEnumerable<int> both = intArray1.Intersect(intArray2);

Enumerable.Unionは2つのシーケンスの和集合を生成します。
learn.microsoft.com

int[] intArray1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] intArray2 = { 8, 3, 6, 4, 4, 9, 1, 0 };
IEnumerable<int> union = intArray1.Union(intArray2);

サンプルスクリプト

2つの数値配列から積集合と和集合を求める以下のサンプルスクリプトを作成しました。
・EnumerableIntersectUnionTest.cs

using System.Linq;
using UnityEngine;

public class EnumerableIntersectUnionTest : MonoBehaviour
{
    void Start()
    {
        // 2の倍数の数値型の配列を作成
        float[] floatArray1 = new float[] { 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f };
        Debug.Log($"floatArray1: {string.Join(", ", floatArray1)}");
        // 3の倍数の数値型の配列を作成
        float[] floatArray2 = new float[] { 3.0f, 6.0f, 9.0f, 12.0f, 15.0f, 18.0f };
        Debug.Log($"floatArray2: {string.Join(", ", floatArray2)}");
        
        // Intersectメソッドを使用して、2つの配列の積集合を取得
        float[] intersectResult = floatArray1.Intersect(floatArray2).ToArray();
        Debug.Log($"intersectResult: {string.Join(", ", intersectResult)}");
        
        // Unionメソッドを使用して、2つの配列の和集合を取得
        float[] unionResult = floatArray1.Union(floatArray2).ToArray();
        Debug.Log($"unionResult: {string.Join(", ", unionResult)}");
    }
}