c# - 动态更改月份列表
问题描述
我被困在一个要求中。我从 中得到两个标志database
,即lastMonthNumber
和lastMonthName
,它们的范围可以是1 to 12
和January to December
。现在我有一个要求,如果lastMonthName="March"
和lastMonthNumner=12
,那么父母list
应该如下:
1, April
2, May
3, June
4, July
5, August
6, September
7, October
8, November
9, December
10, January
11, February
12, March
如果lastMonthName="April"
和lastMonthNumber=6
,那么列表应该是:
7, November
8, December
9, January
10, February
11, March
12, April
这lastMonthNumber
可以从1 to 12
也lastMonthName
可以从Jan to Dec
。父母list
需要是动态的。
如果lastMonthNumber=6
和lastMonthName="April"
,则list
需要有 6 个元素,其中 April 为 12 并且回溯到总共有 6 个元素。
父级list
可以是 a dictionary
,例如:
var monthsDictionary=new Dictionary<int, string>();
我正在尝试以下方法,但无法进一步可视化:
var monthsDictionary = new Dictionary<int, string>();
var numbers = new List<int> { 1,2,3,4,5,6,7,8,9,10,11,12};
var months = new List<string> {"January","February","March","April","May","June","July","August","September","October","November","December" };
foreach (var month in months.Select())
{
if (month == lastMonthName)
{
}
}
请帮忙。指针将非常有帮助。
解决方案
有一个带有月份名称的常量
private readonly string[] monthNames = { "Januar" ..., "December" };
以及能够循环索引的访问器方法:
private string GetMonthName(int index)
{
if (index < 0) return monthNames[monthNames.Length - 1 - (index % monthNames.Length)];
return monthNames[index % monthNames.Length];
}
然后创建列表:
int indexOfLastMonthName = Array.IndexOf(monthNames, lastMonthName);
var parentData = Enumerable
// Create as many items as last month number
.Range(0, lastMonthNumber)
// Create the list in reverse order, start on LastMonthName and 12,
// then go back with every item
.Select(x => new
{
Number = 12 - x,
Name = GetMonthName(indexOfLastMonthName - x)
}
// Turn it back
.Reverse();
然后将其填充到适当的数据结构中。例如像这样:
List<Tuple<int, string>> parentList = parentData
.Select(x => Tuple.Create(x.Number, x.Name)))
.ToList();
如果您更喜欢经典解决方案(使用GetMonthName
上面的方法):
int indexOfLastMonthName = Array.IndexOf(monthNames, lastMonthName);
List<Tuple<int, string>> parentList = new List<Tuple<int, string>>();
for(int i = 0; i < lastMonthNumber; i++)
{
parentList.Add(
Tuple.Create(
12 - i,
GetMonthName(indexOfLastMonthName - i));
}
parentList.Reverse();
推荐阅读
- python - Discord.py 从消息中的链接下载图像
- python - 用 kivy 初始化文本输入 - python
- git - git status 有没有办法显示特定时间的更改?
- c - 为 x11 窗口定义自定义属性,以便将附加数据与其关联
- azure-devops-rest-api - 如何使用 REST Api 在 Azure DevOps 中获取与给定构建关联的存储库资源?
- matlab - 如何在 Matlab 中保存标记的超像素并以 .pgm 格式将它们可视化?
- verilog - 双方括号
- regex - 在 Typescript 中将相对导入转换为绝对导入
- reactjs - 反应钩子:反应路由器参数更改,但视图不是从开始重新渲染
- angular - 在加载时数据更改时循环子组件数据?