Например, у меня есть следующие интерфейс и классы:
public interface IRole {
DateTime Since {get;}
DateTime Until {get;}
}
public class Manager : IRole {
public DateTime Since {get; private set;}
public DateTime Until {get; private set;}
}
public class Employee : IRole {
public DateTime Since {get; private set;}
public DateTime Until {get; private set;}
}
public class Ceo: IRole {
public DateTime Since {get; private set;}
public DateTime Until {get; private set;}
}
Если общий список содержит следующие элементы:
list[0]=new Manager();
list[1]=new Manager();
list[2]=new Employee();
list[3]=new Manager();
list[4]=new Ceo();
list[5]=new Ceo();
И я объединю те же типы, объединю «С / До» и сожму элементы в списке, чтобы получился результат:
newList[0]=new Manager() //(Since is from list[0], Until is from list[1])
newList[1]=new Employee() //(list[2])
newList[2]=new Manager() //(list[3])
newList[3]=new Ceo() //(Since is from list[4], Until is from list[5])
Пожалуйста, убедитесь, что вы понимаетевопрос, прежде чем ответить, поскольку у меня есть история неоднозначности, и я не хочу расстраивать людей.Поэтому, пожалуйста, прокомментируйте, если вы чувствуете, что «требование» неясно.
Мой путь немного туп:
for each item in list
the current item shall always be merged into the previous item
check if current item has the same type as the previous item
get last item from newList and merge last item with current item
Мне просто интереснодолжно быть лучшее решение.
Обновлено:
Я просто понимаю, что мое "тупое решение" не будет охватывать случаи, как более 2 непрерывных предметов одного типа.
Пример:
list[0]=new Manager();
list[1]=new Manager();
list[2]=new Employee();
list[3]=new Manager();
list[4]=new Ceo();
list[5]=new Ceo();
list[6]=new Ceo();