我想在连续几天合并相同的开放时间。
public class AgendaDay {
public string Day;
public string AM;
public string PM;
public AgendaDay(string day, string aM, string pM)
{
Day = day;
AM = aM;
PM = pM;
}
}
var agenda = new List<AgendaDay>() {
new AgendaDay("Mon", "0900-1200", "1400-1700"),
new AgendaDay("Tue", "0900-1200", "1400-1700"),
new AgendaDay("Wed", "", "1400-1700"),
new AgendaDay("Thu", "0900-1200", "1400-1700"),
new AgendaDay("Fri", "0900-1200", "1400-1700"),
new AgendaDay("Sat", "0900-1200", ""),
null
};
将其缩减为:
var expected = @"Mon-Tue: 09H00-12H00 / 14H00-17H00
Wed: 14H00-17H00
Thu-Fri: 09H00-12H00 / 14H00-17H00
Sat: 09H00-12H00";
现在我有:
public class ShortAgendaDay
{
public List<string> Days;
public string AM;
public string PM;
public ShortAgendaDay(List<string> days, string aM, string pM)
{
Days = days;
AM = aM;
PM = pM;
}
}
private static string ShrinkOpenningHour( List<AgendaDay> agenda)
{
var temp = agenda.Where(x=> x!=null).ToArray();
List<ShortAgendaDay> sum = new List<ShortAgendaDay>();
for (var i = 0; i < temp.Count(); i++)
{
if (i == 0) continue;
var last = temp[i - 1];
var curr = temp[i];
if (last.AM == curr.AM && last.PM == curr.PM) {
}
}
throw new NotImplementedException();
}
我的想法是将其缩小为以下列表:
{
day:["Mon","Tue"],
hour: "09H00-12H00 / 14H00-17H00"
},
{
day:["Wed"],
hour:"14H00-17H00"
},
{
day:["Thu","Fri"],
hour:"09H00-12H00 / 14H00-17H00"
}
然后从日期列表中仅取出第一个和最后一个。
从“0900-1200”到“09h00-12h00”的格式不是您可以在答案中忽略的问题。
“0900-1400”,“1400-1700”仅等于“0900-1400”,“1400-1700”。没有像“0900-1000”,“1000-1700”这样的技巧。重叠的时间戳并不重要。它是一个字符串,必须作为字符串处理,而不是带有重叠时间跨度的时间戳。
答案 0 :(得分:0)
这是合并:
private string ShrinkOpenningHour(List<AgendaDay> agenda)
{
var temp = agenda.Where(x => x != null).ToArray();
List<ShortAgendaDay> sum = new List<ShortAgendaDay>();
for (var i = 0; i < temp.Count(); i++)
{
if (i == 0 || (temp[i - 1].heureAM == temp[i].heureAM && temp[i - 1].heurePM == temp[i].heurePM))
{
var existingEntry = sum.Where(x => x.AM == temp[i].heureAM && x.PM == temp[i].heurePM);
if (existingEntry.Count() == 1)
{
existingEntry.First().Days.Add(temp[i].jour);
}
else
{
sum.Add(new ShortAgendaDay(new List<string>() { temp[i].jour }, temp[i].heureAM, temp[i].heurePM));
}
}
}
return string.Join(Environment.NewLine, sum.Select(x => FormatHorraire(x)));
}
作为奖励形成:
private string FormatHorraire(ShortAgendaDay x)
{
string days = string.Join(" - ", new String[] { x.Days.First(), x.Days.Last() }.Where(ar => ar != null).Distinct());
string hour = FormatHorraire(x.AM, x.PM);
return days + " : " + hour;
}
private string FormatHorraire(string am, string pm)
{
return string.Join(" / ", new string[] { am, pm }.Where(y => !string.IsNullOrWhiteSpace(y) && y.Length > 7).Select(y => y.Insert(2, "H").Insert(8, "H")));
}