TheTalion
@TheTalion

Как сравнивать объекты записанный в лист по определенному параметру?

Не могу понять, каким образом можно сравнивать строки, записанный в лист. Вот, для примера, создаем типизированный лист, записываем туда пару строк, а как дальше? Нужно, чтобы при совпадение X или Y объекта группы 1 с другими группами возникало какое-то событие (ну, пустое, например), но как это сделать, не могу понять.

public static class Mainf
	{
		public static void main()
		{
			var Objects = new List<Obj>();
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 1 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 3 });
Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 3 });
		}
	}


		struct Obj
		{
			public int x, y, group;
			public Obj(int x, int y, int group)
			{
				this.x = x;
				this.y = y;
				this.group = group;
		}
		}

Буду рад помощи. (желательно с кодом)
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
andrewpianykh
@andrewpianykh
1) Реализуйте свой класс списка, унаследовав его от List;
2) Добавьте событие вызываемое при добавление схожего объекта Obj;
3) Реализуйте метод Add (скрыв аналогичный метод базового класса), в случае добавления схожего объекта вызывайте событие DuplObjAdded.

public class DuplObjEventArgs : EventArgs
{
	public DuplObjEventArgs(Obj duplObj)
	{
		DuplObj = duplObj;
	}

	public Obj DuplObj { get; private set; }
}

public class ObjList : List<Obj>
{
	public EventHandler<DuplObjEventArgs> DuplObjAdded;

	public ObjList() : base()
	{
	}

	public new void Add(Obj newObj)
	{
		base.Add(newObj);

		if (this.Any(s => s.group != newObj.group && s.x == newObj.x && s.y == newObj.y))
		{
			OnDuplObjAdded(newObj);
		}
	}

	protected virtual void OnDuplObjAdded(Obj duplObj)
	{
		DuplObjAdded?.Invoke(this, new DuplObjEventArgs(duplObj));
	}
}

static void Main(string[] args)
{
	var Objects = new ObjList();

	Objects.DuplObjAdded += (o,e) => Console.WriteLine("DuplObj group: {0} x: {1} y: {2}", e.DuplObj.group, e.DuplObj.x, e.DuplObj.y);

	Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 1 });
	Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
	Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
	Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 2 });
	Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 3 });
	Objects.Add(new Obj { x = RandomRange(3000), y = RandomRange(3000), group = 3 });

	Console.ReadKey();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Got_Oxidus
Учусь
Obj - переделать в класс.
добавить метод
bool Compare(Obj fs, Obj sn)
{
   if(fs.x == sn.x && fs.y == sn.y && fs.group == sn group)
      return true;
   else return false;
}


P.S. Написал первое, что пришло в голову.
P.P.S Main большой буквы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы