天干地支

天干地支#

[1]:
#r "nuget:ConsoleTables"
#r "nuget:YiJingFramework.PrimitiveTypes"
using ConsoleTables;
using YiJingFramework.PrimitiveTypes;
Installed Packages
  • ConsoleTables, 2.6.1
  • YiJingFramework.PrimitiveTypes, 4.0.1

类型 TianganDizhi 分别表示天干和地支。

总体上来说其与五行类似,主要的不同之处在于其序数是具有一定意义的,因此提供了 Index 属性和 FromIndex 方法,且其值是从 1 开始的:

[2]:
var numbers = Enumerable.Range(1 - 2, 12 + 4);
var table = new ConsoleTable("i", "t = Tiangan.FromIndex(i)", "t.Index", "d = Dizhi.FromIndex(i)", "d.Index");
foreach (var i in numbers)
{
    var t = Tiangan.FromIndex(i);
    var newIT = t.Index;
    var d = Dizhi.FromIndex(i);
    var newID = d.Index;
    var starT = newIT == i ? ' ' : '*';
    var starD = newID == i ? ' ' : '*';
    table.AddRow(i, $"{starT}{t:C} {t}", newIT, $"{starD}{d:C} {d}", newID);
}
table.Write(Format.Minimal);
| i  | t = Tiangan.FromIndex(i) | t.Index | d = Dizhi.FromIndex(i) | d.Index |
|----|--------------------------|---------|------------------------|---------|
| -1 | *壬 Ren                  | 9       | *戌 Xu                 | 11      |
| 0  | *癸 Gui                  | 10      | *亥 Hai                | 12      |
| 1  |  甲 Jia                  | 1       |  子 Zi                 | 1       |
| 2  |  乙 Yi                   | 2       |  丑 Chou               | 2       |
| 3  |  丙 Bing                 | 3       |  寅 Yin                | 3       |
| 4  |  丁 Ding                 | 4       |  卯 Mao                | 4       |
| 5  |  戊 Wu                   | 5       |  辰 Chen               | 5       |
| 6  |  己 Ji                   | 6       |  巳 Si                 | 6       |
| 7  |  庚 Geng                 | 7       |  午 Wu                 | 7       |
| 8  |  辛 Xin                  | 8       |  未 Wei                | 8       |
| 9  |  壬 Ren                  | 9       |  申 Shen               | 9       |
| 10 |  癸 Gui                  | 10      |  酉 You                | 10      |
| 11 | *甲 Jia                  | 1       |  戌 Xu                 | 11      |
| 12 | *乙 Yi                   | 2       |  亥 Hai                | 12      |
| 13 | *丙 Bing                 | 3       | *子 Zi                 | 1       |
| 14 | *丁 Ding                 | 4       | *丑 Chou               | 2       |

不过,由于在使用 default 创建结构体时,其内部值会为零。因此,内部值不能使用上述操作的结果。考虑到这一问题,我们仍然提供了强制转换运算符,它直接使用内部值 Index - 1

[3]:
var numbers = Enumerable.Range(0 - 2, 12 + 4);
var table = new ConsoleTable("i", "t = (Tiangan)i", "(int)t", "d = (Dizhi)i", "(int)d");
foreach (var i in numbers)
{
    var t = (Tiangan)i;
    var newIT = (int)t;
    var d = (Dizhi)i;
    var newID = (int)d;
    var starT = newIT == i ? ' ' : '*';
    var starD = newID == i ? ' ' : '*';
    table.AddRow(i, $"{starT}{t:C} {t}", newIT, $"{starD}{d:C} {d}", newID);
}
table.Write(Format.Minimal);
| i  | t = (Tiangan)i | (int)t | d = (Dizhi)i | (int)d |
|----|----------------|--------|--------------|--------|
| -2 | *壬 Ren        | 8      | *戌 Xu       | 10     |
| -1 | *癸 Gui        | 9      | *亥 Hai      | 11     |
| 0  |  甲 Jia        | 0      |  子 Zi       | 0      |
| 1  |  乙 Yi         | 1      |  丑 Chou     | 1      |
| 2  |  丙 Bing       | 2      |  寅 Yin      | 2      |
| 3  |  丁 Ding       | 3      |  卯 Mao      | 3      |
| 4  |  戊 Wu         | 4      |  辰 Chen     | 4      |
| 5  |  己 Ji         | 5      |  巳 Si       | 5      |
| 6  |  庚 Geng       | 6      |  午 Wu       | 6      |
| 7  |  辛 Xin        | 7      |  未 Wei      | 7      |
| 8  |  壬 Ren        | 8      |  申 Shen     | 8      |
| 9  |  癸 Gui        | 9      |  酉 You      | 9      |
| 10 | *甲 Jia        | 0      |  戌 Xu       | 10     |
| 11 | *乙 Yi         | 1      |  亥 Hai      | 11     |
| 12 | *丙 Bing       | 2      | *子 Zi       | 0      |
| 13 | *丁 Ding       | 3      | *丑 Chou     | 1      |