Merge pull request #12 from tp1415926535/DictPerformFix

修复字典取值性能
This commit is contained in:
6tail
2024-12-19 20:59:45 +08:00
committed by GitHub
4 changed files with 120 additions and 155 deletions

View File

@@ -120,19 +120,12 @@ namespace Lunar
get
{
var l = new List<FotoFestival>();
try
{
l.AddRange(FotoUtil.FESTIVAL[Math.Abs(Month) + "-" + Day]);
}
catch
{
// ignored
}
if (FotoUtil.FESTIVAL.TryGetValue(Math.Abs(Month) + "-" + Day, out var festivals))
l.AddRange(festivals);
return l;
}
}
/// <summary>
/// 纪念日
/// </summary>
@@ -141,15 +134,8 @@ namespace Lunar
get
{
var l = new List<string>();
try
{
var fs = FotoUtil.OTHER_FESTIVAL[$"{Month}-{Day}"];
l.AddRange(fs);
}
catch
{
// ignored
}
if (FotoUtil.OTHER_FESTIVAL.TryGetValue($"{Month}-{Day}", out var festivals))
l.AddRange(festivals);
return l;
}
}
@@ -192,10 +178,10 @@ namespace Lunar
case 30:
return true;
case 28:
{
var m = LunarMonth.FromYm(Lunar.Year, Month);
return null != m && 30 != m.DayCount;
}
{
var m = LunarMonth.FromYm(Lunar.Year, Month);
return null != m && 30 != m.DayCount;
}
default:
return false;
}
@@ -205,7 +191,7 @@ namespace Lunar
/// <summary>
/// 十斋日
/// </summary>
public bool DayZhaiTen => Day == 1 || Day == 8 || Day == 14 || Day == 15 || Day == 18 || Day == 23 || Day == 24 || Day == 28 || Day == 29 || Day == 30;
public bool DayZhaiTen => Day == 1 || Day == 8 || Day == 14 || Day == 15 || Day == 18 || Day == 23 || Day == 24 || Day == 28 || Day == 29 || Day == 30;
/// <summary>
/// 观音斋日

View File

@@ -168,7 +168,7 @@ namespace Lunar
public EightChar.EightChar EightChar => _eightChar ?? (_eightChar = new EightChar.EightChar(this));
private Foto _foto;
/// <summary>
/// 佛历
/// </summary>
@@ -184,7 +184,7 @@ namespace Lunar
/// <summary>
/// 默认使用当前日期初始化
/// </summary>
public Lunar(): this(DateTime.Now)
public Lunar() : this(DateTime.Now)
{
}
@@ -222,7 +222,8 @@ namespace Lunar
Second = second;
var noon = Solar.FromJulianDay(m.FirstJulianDay + lunarDay - 1);
Solar = Solar.FromYmdHms(noon.Year, noon.Month, noon.Day, hour, minute, second);
if (noon.Year != lunarYear) {
if (noon.Year != lunarYear)
{
y = LunarYear.FromYear(noon.Year);
}
Compute(y);
@@ -234,7 +235,7 @@ namespace Lunar
/// <param name="solar">阳历</param>
public Lunar(Solar solar)
{
var ly = LunarYear.FromYear(solar.Year);
var ly = LunarYear.FromYear(solar.Year);
foreach (var m in ly.Months)
{
var days = solar.Subtract(Solar.FromJulianDay(m.FirstJulianDay));
@@ -252,12 +253,12 @@ namespace Lunar
Solar = solar;
Compute(ly);
}
/// <summary>
/// 通过阳历日期初始化
/// </summary>
/// <param name="date">阳历日期</param>
public Lunar(DateTime date): this(Solar.FromDate(date))
public Lunar(DateTime date) : this(Solar.FromDate(date))
{
}
@@ -447,7 +448,7 @@ namespace Lunar
TimeZhiIndex = LunarUtil.GetTimeZhiIndex(hm);
TimeGanIndex = (DayGanIndexExact % 5 * 2 + TimeZhiIndex) % 10;
}
private void ComputeWeek()
{
WeekIndex = Solar.Week;
@@ -526,7 +527,7 @@ namespace Lunar
/// <summary>
/// 日天干八字流派2晚子时日柱算当天如甲
/// </summary>
public string DayGanExact2 => LunarUtil.GAN[DayGanIndexExact2 + 1];
public string DayGanExact2 => LunarUtil.GAN[DayGanIndexExact2 + 1];
/// <summary>
/// 年地支(以正月初一作为新年的开始),如亥
@@ -779,16 +780,11 @@ namespace Lunar
get
{
var l = new List<string>();
try
{
l.Add(LunarUtil.FESTIVAL[$"{Month}-{Day}"]);
}
catch
{
// ignored
}
if (LunarUtil.FESTIVAL.TryGetValue($"{Month}-{Day}", out var festival))
l.Add(festival);
if (Math.Abs(Month) == 12 && Day >= 29 && Year != Next(1).Year) {
if (Math.Abs(Month) == 12 && Day >= 29 && Year != Next(1).Year)
{
l.Add("除夕");
}
return l;
@@ -803,14 +799,8 @@ namespace Lunar
get
{
var l = new List<string>();
try
{
l.AddRange(LunarUtil.OTHER_FESTIVAL[$"{Month}-{Day}"]);
}
catch
{
// ignored
}
if (LunarUtil.OTHER_FESTIVAL.TryGetValue($"{Month}-{Day}", out var festivals))
l.AddRange(festivals);
var solarYmd = Solar.Ymd;
var jq = JieQiTable["清明"];
@@ -951,7 +941,7 @@ namespace Lunar
/// 年太岁方位流派2新年以立春零点起算
/// </summary>
public string YearPositionTaiSui => GetYearPositionTaiSui();
/// <summary>
/// 年太岁方位描述流派2新年以立春零点起算如东北
/// </summary>
@@ -1410,9 +1400,12 @@ namespace Lunar
var indexExact = LunarUtil.GetJiaZiIndex(yearInGanZhi) + 1;
var index = LunarUtil.GetJiaZiIndex(YearInGanZhi) + 1;
var yearOffset = indexExact - index;
if (yearOffset > 1) {
if (yearOffset > 1)
{
yearOffset -= 60;
} else if (yearOffset < -1) {
}
else if (yearOffset < -1)
{
yearOffset += 60;
}
var yuan = (Year + yearOffset + 2696) / 60 % 3;
@@ -2072,7 +2065,7 @@ namespace Lunar
}
var end = new Solar(start.Year, start.Month, start.Day).Next(81);
if (current.IsBefore(start) || !current.IsBefore(end))
{
return null;
@@ -2089,7 +2082,7 @@ namespace Lunar
public Fu Fu
{
get
{
{
var current = new Solar(Solar.Year, Solar.Month, Solar.Day);
var xiaZhi = JieQiTable["夏至"];
var liQiu = JieQiTable["立秋"];
@@ -2161,7 +2154,8 @@ namespace Lunar
}
}
var index = Solar.Subtract(jieQi.Solar) / 5;
if (index > 2) {
if (index > 2)
{
index = 2;
}
return LunarUtil.WU_HOU[(offset * 3 + index) % LunarUtil.WU_HOU.Length];
@@ -2195,14 +2189,7 @@ namespace Lunar
{
var gan = LunarUtil.LU[DayGan];
string zhi = null;
try
{
zhi = LunarUtil.LU[DayZhi];
}
catch
{
// ignored
}
LunarUtil.LU.TryGetValue(DayZhi, out zhi);
var lu = $"{gan}命互禄";
if (null != zhi)
@@ -2225,7 +2212,7 @@ namespace Lunar
{
get
{
var l = new List<LunarTime> {new LunarTime(Year, Month, Day, 0, 0, 0)};
var l = new List<LunarTime> { new LunarTime(Year, Month, Day, 0, 0, 0) };
for (var i = 0; i < 12; i++)
{
l.Add(new LunarTime(Year, Month, Day, (i + 1) * 2 - 1, 0, 0));

View File

@@ -50,7 +50,7 @@ namespace Lunar
/// <summary>
/// 默认使用当前日期初始化
/// </summary>
public Solar(): this(DateTime.Now)
public Solar() : this(DateTime.Now)
{
}
@@ -110,7 +110,7 @@ namespace Lunar
/// 通过日期初始化
/// </summary>
/// <param name="date">日期</param>
public Solar(DateTime date): this(date.Year, date.Month, date.Day, date.Hour, date.Minute,date.Second)
public Solar(DateTime date) : this(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second)
{
}
@@ -188,9 +188,9 @@ namespace Lunar
/// <param name="minute">分钟0到59</param>
/// <param name="second">秒钟0到59</param>
/// <returns>阳历</returns>
public static Solar FromYmdHms(int year, int month, int day, int hour = 0, int minute = 0,int second = 0)
public static Solar FromYmdHms(int year, int month, int day, int hour = 0, int minute = 0, int second = 0)
{
return new Solar(year, month, day, hour, minute,second);
return new Solar(year, month, day, hour, minute, second);
}
/// <summary>
@@ -257,7 +257,7 @@ namespace Lunar
int[] hours = { h };
if (0 == h && 2 == sect)
{
hours = new [] { 0, 23 };
hours = new[] { 0, 23 };
}
var startYear = baseYear - 1;
@@ -340,27 +340,48 @@ namespace Lunar
{
var index = 11;
var y = Month * 100 + Day;
if (y >= 321 && y <= 419) {
if (y >= 321 && y <= 419)
{
index = 0;
} else if (y >= 420 && y <= 520) {
}
else if (y >= 420 && y <= 520)
{
index = 1;
} else if (y >= 521 && y <= 621) {
}
else if (y >= 521 && y <= 621)
{
index = 2;
} else if (y >= 622 && y <= 722) {
}
else if (y >= 622 && y <= 722)
{
index = 3;
} else if (y >= 723 && y <= 822) {
}
else if (y >= 723 && y <= 822)
{
index = 4;
} else if (y >= 823 && y <= 922) {
}
else if (y >= 823 && y <= 922)
{
index = 5;
} else if (y >= 923 && y <= 1023) {
}
else if (y >= 923 && y <= 1023)
{
index = 6;
} else if (y >= 1024 && y <= 1122) {
}
else if (y >= 1024 && y <= 1122)
{
index = 7;
} else if (y >= 1123 && y <= 1221) {
}
else if (y >= 1123 && y <= 1221)
{
index = 8;
} else if (y >= 1222 || y <= 119) {
}
else if (y >= 1222 || y <= 119)
{
index = 9;
} else if (y <= 218) {
}
else if (y <= 218)
{
index = 10;
}
return SolarUtil.XING_ZUO[index];
@@ -376,36 +397,18 @@ namespace Lunar
{
var l = new List<string>();
//获取几月几日对应的节日
try
{
l.Add(SolarUtil.FESTIVAL[Month + "-" + Day]);
}
catch
{
// ignored
}
if (SolarUtil.FESTIVAL.TryGetValue(Month + "-" + Day, out var festival))
l.Add(festival);
//计算几月第几个星期几对应的节日
var weeks = (int)Math.Ceiling(Day / 7D);
//星期几0代表星期天
try
{
l.Add(SolarUtil.WEEK_FESTIVAL[Month + "-" + weeks + "-" + Week]);
}
catch
{
// ignored
}
if (SolarUtil.WEEK_FESTIVAL.TryGetValue(Month + "-" + weeks + "-" + Week, out var festival2))
l.Add(festival2);
if (Day + 7 <= SolarUtil.GetDaysOfMonth(Year, Month)) return l;
try
{
l.Add(SolarUtil.WEEK_FESTIVAL[Month + "-0-" + Week]);
}
catch
{
// ignored
}
if (SolarUtil.WEEK_FESTIVAL.TryGetValue(Month + "-0-" + Week, out var festival3))
l.Add(festival3);
return l;
}
@@ -419,15 +422,8 @@ namespace Lunar
get
{
var l = new List<string>();
try
{
var fs = SolarUtil.OTHER_FESTIVAL[Month + "-" + Day];
l.AddRange(fs);
}
catch
{
// ignored
}
if (SolarUtil.OTHER_FESTIVAL.TryGetValue(Month + "-" + Day, out var festivals))
l.AddRange(festivals);
return l;
}
}
@@ -524,7 +520,7 @@ namespace Lunar
{
return SolarUtil.GetDaysBetween(solar.Year, solar.Month, solar.Day, Year, Month, Day);
}
/// <summary>
/// 阳历日期相减,获得相差分钟数
/// </summary>
@@ -564,11 +560,12 @@ namespace Lunar
{
return true;
}
if (Month < solar.Month)
if (Month < solar.Month)
{
return false;
}
if (Day > solar.Day) {
if (Day > solar.Day)
{
return true;
}
if (Day < solar.Day)
@@ -613,7 +610,7 @@ namespace Lunar
{
return false;
}
if (Month < solar.Month)
if (Month < solar.Month)
{
return true;
}
@@ -637,7 +634,7 @@ namespace Lunar
{
return false;
}
if (Minute < solar.Minute)
if (Minute < solar.Minute)
{
return true;
}
@@ -724,21 +721,25 @@ namespace Lunar
{
d += days;
var daysInMonth = SolarUtil.GetDaysOfMonth(y, m);
while (d > daysInMonth) {
while (d > daysInMonth)
{
d -= daysInMonth;
m++;
if (m > 12) {
if (m > 12)
{
m = 1;
y++;
}
daysInMonth = SolarUtil.GetDaysOfMonth(y, m);
}
} else if (days < 0)
}
else if (days < 0)
{
while (d + days <= 0)
{
m--;
if (m < 1) {
if (m < 1)
{
m = 12;
y--;
}
@@ -748,7 +749,8 @@ namespace Lunar
}
if (1582 == y && 10 == m)
{
if (d > 4) {
if (d > 4)
{
d += 10;
}
}
@@ -763,7 +765,7 @@ namespace Lunar
/// <returns>阳历日期</returns>
public Solar Next(int days, bool onlyWorkday = false)
{
if(!onlyWorkday)
if (!onlyWorkday)
{
return NextDay(days);
}
@@ -780,10 +782,12 @@ namespace Lunar
if (null == holiday)
{
var week = solar.Week;
if (0 == week || 6 == week) {
if (0 == week || 6 == week)
{
work = false;
}
} else
}
else
{
work = holiday.Work;
}
@@ -848,19 +852,25 @@ namespace Lunar
}
// 清明
if ("清明".Equals(Lunar.JieQi)) {
if ("清明".Equals(Lunar.JieQi))
{
return 3;
}
var holiday = HolidayUtil.GetHoliday(Year, Month, Day);
if (null != holiday) {
if (null != holiday)
{
// 法定假日非上班
if (!holiday.Work) {
if (!holiday.Work)
{
return 2;
}
} else {
}
else
{
// 周末
var week = Week;
if (week == 6 || week == 0) {
if (week == 6 || week == 0)
{
return 2;
}
}

View File

@@ -109,14 +109,8 @@ namespace Lunar
get
{
var l = new List<TaoFestival>();
try
{
l.AddRange(TaoUtil.FESTIVAL[Month + "-" + Day]);
}
catch
{
// ignored
}
if (TaoUtil.FESTIVAL.TryGetValue(Month + "-" + Day, out var festivals))
l.AddRange(festivals);
var jq = Lunar.JieQi;
switch (jq)
@@ -130,24 +124,12 @@ namespace Lunar
}
// 八节日
try
{
l.Add(new TaoFestival(TaoUtil.BA_JIE[jq]));
}
catch
{
// ignored
}
if (TaoUtil.BA_JIE.TryGetValue(jq, out var bj))
l.Add(new TaoFestival(bj));
// 八会日
try
{
l.Add(new TaoFestival(TaoUtil.BA_HUI[Lunar.DayInGanZhi]));
}
catch
{
// ignored
}
if (TaoUtil.BA_HUI.TryGetValue(Lunar.DayInGanZhi, out var bh))
l.Add(new TaoFestival(bh));
return l;
}