我需要根据WED-FRI得到从WED-FRI的星期集合,所以写了个方法。
/// <summary>
/// 获取周期性星期
/// WED-FRI=》WED、THU、FRI
/// SUN-WED=》SUN、MON、TUE、WED
/// </summary>
/// <param name="strWeeks">阶段性星期,例如:WED-FRI</param>
/// <returns>阶段性星期集合</returns>
private List<string> GetSplitWeeks(string strWeeks)
{
List<string> result = new List<string>();
string[] weeks = new string[] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
//开始星期节点
string strBeginWeek = strWeeks.Split('-')[0];
//结束星期节点
string strEndWeek = strWeeks.Split('-')[1];
//用于判断跳出循环
bool b = false;
while (true)
{
foreach (var item in weeks)
{
if (item.Equals(strEndWeek) && b == true)
{
result.Add(item);
b = false;
}
//集合中不能出现重复值,重复则是第2轮了
if (item.Equals(strBeginWeek) && !result.Contains(item) || b)
{
result.Add(item);
b = true;
}
}
if (!b)
{
return result;
}
}
}
优化后:
var arr = new string[] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" }.ToList();
string str = "FRI-TUE";
string first = str.Split("-")[0];
string second = str.Split("-")[1];
var position = arr.IndexOf(first);
var nextPosition = arr.IndexOf(second, position+1);
var finalResult = arr.Skip(position).Take(nextPosition - position + 1);