Почему массив выдает такой результат? С#

Результат должен быть просто 1,но почему то результат 2,1,2. Метод ArrayDiff должен из массива a удалять все такие же цифры, которые есть в массиве b.

Код:

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public static class Kata
{
    public static int[] ArrayDiff(int[] a, int[] b)
    {
        List result = new List();
        result = a.ToList();
        for(int BNumber = 0; BNumber != b.Length; BNumber++)
        {
            for(int ANumber = 0; ANumber != a.Length; ANumber++)
            {
                // Debug.Log(b[BNumber] + " " + a[ANumber]);
                if (a[ANumber] != b[BNumber])
                {
                    // Debug.Log($"Удаляем элемент! номер элемента: {a[ANumber]}");
                    result.Remove(ANumber);
                }
                else
                {
                    // Debug.Log("Оставляем элемент!");
                }
            }
        }
        return result.ToArray();
    }
}

public class Test : MonoBehaviour
{
    void Start()
    {
        int[] array = Kata.ArrayDiff(new int[] { 2, 2, 1, 2 }, new int[] { 1 });
        foreach(int i in array)
        {
            Debug.Log( array[i] );
        }
    }
}

Ответы (2 шт):

Автор решения: Evgenii Izhboldin

Потому что, там где у Вас result.Remove(ANumber); - ANumber это индекс в массиве, а не сам элемент

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public static class Kata
{
    public static int[] ArrayDiff(int[] a, int[] b)
    {
        List result = new List();
        result = a.ToList();
        for(int BNumber = 0; BNumber != b.Length; BNumber++)
        {
            for(int ANumber = 0; ANumber != a.Length; ANumber++)
            {
                // Debug.Log(b[BNumber] + " " + a[ANumber]);
                if (a[ANumber] != b[BNumber])
                {
                    // Debug.Log($"Удаляем элемент! номер элемента: {a[ANumber]}");
                    //result.Remove(ANumber); - тут Вы пытаетесь удалить число равное индексу, при этом странно что пытаетесь Вы удалить, когда числа не равны
                    
                }
                else
                {
                    // Debug.Log("Оставляем элемент!");
                    result.Remove(a[ANumber]);
                }
            }
        }
        return result.ToArray();
    }
}

public class Test : MonoBehaviour
{
    void Start()
    {
        int[] array = Kata.ArrayDiff(new int[] { 2, 2, 1, 2 }, new int[] { 1 });
        foreach(int i in array)
        {
            Debug.Log( array[i] );
        }
    }
}
→ Ссылка
Автор решения: CrazyElf

У вас тут перепутано:

// Debug.Log($"Удаляем элемент! номер элемента: {a[ANumber]}");
result.Remove(ANumber);

Как-раз таки номер элемента - это ANumber, а вот удалять надо - a[ANumber]:

// Debug.Log($"Удаляем элемент! номер элемента: {ANumber}");
result.Remove(a[ANumber]);

P.S. И да, Evgenii Izhboldin прав, что переместил удаление в else - вы ещё и по смыслу не то делаете, что у вас написано. Определитесь - вам надо оставить одинаковые элементы или разные. По описанию и названию функции у вас должна остаться разница между массивами, а результат вы хотите обратный судя по приведённым данным - оставить одинаковые элементы. Непонятно.

→ Ссылка