例如,我有以下接口和类:
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();
我将合并相同类型的内容,将Since/Until组合在一起,并缩小列表项,使输出结果如下:
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();