Результат должен быть просто 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] );
}
}
}
Потому что, там где у Вас 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] );
}
}
}
У вас тут перепутано:
// Debug.Log($"Удаляем элемент! номер элемента: {a[ANumber]}");
result.Remove(ANumber);
Как-раз таки номер элемента - это ANumber
, а вот удалять надо - a[ANumber]
:
// Debug.Log($"Удаляем элемент! номер элемента: {ANumber}");
result.Remove(a[ANumber]);
P.S. И да, Evgenii Izhboldin прав, что переместил удаление в else
- вы ещё и по смыслу не то делаете, что у вас написано. Определитесь - вам надо оставить одинаковые элементы или разные. По описанию и названию функции у вас должна остаться разница между массивами, а результат вы хотите обратный судя по приведённым данным - оставить одинаковые элементы. Непонятно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно создать стек в котором хранится ссылка на тип ISolid - объект класса
Скачал Atom, поставил: language-csharp, ide-csharp, linter, но ошибки по прежнему не подсвечиваютсяЕсть ли пакет нужный для шарпа? Вот скрины, что ошибки нет
Формулировка вопроса возможно размытая, поэтому вот моя цель:
Пытаюсь впервые развернуть приложение в докереПри создании приложения выбрал шаблон Angular application