首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将C# List<T>一分为二

将C# List<T>一分为二
EN

Stack Overflow用户
提问于 2010-08-18 23:56:16
回答 4查看 2K关注 0票数 2

我使用的是C#和ASP.NET 3.5。基本上,我从数据集中检索一列数据并将其放入列表中,如下所示:

代码语言:javascript
复制
    List<String> dates = new List<String>();

    foreach (DataRow rowMonth in myDS.Tables[0].Rows)
    {
        string ListedMonthYear = (string)rowMonth[0];
        dates.Add(ListedMonthYear);
    }

返回值为:

代码语言:javascript
复制
 Apr-10
 Mar-10
 Feb-10
 Jan-10
 Dec-09
 Nov-09
 Oct-09

我感兴趣的是将这些值分成两个列表,以便在将来对它们执行操作。

代码语言:javascript
复制
Apr   |  2010
Mar   |  2010
Feb   |  2010
Jan   |  2010
Dec   |  2009
Nov   |  2009
Oct   |  2009

最好的方法是什么?

编辑: rowMonth只是包含所有与日期相关的值的数据行--月份-年、月开始、月结束、月活动或非活动。基本上,我只是尝试提取第一列的月份-年来执行操作,而忽略其余的列。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-18 23:59:09

您可以使用LINQ:

代码语言:javascript
复制
var months = (from item in dates
              select item.Substring(0, 3))
             .ToList();

var years  = (from item in dates
              select 2000 + int.Parse(item.Substring(4, 2)))
             .ToList();

您可能更喜欢将这两个部分分别存储在同一列表中:

代码语言:javascript
复制
var result = (from item in dates
              select Tuple.Create(item.Substring(0, 3),
                                  2000 + int.Parse(item.Substring(4, 2))))
             .ToList();
票数 5
EN

Stack Overflow用户

发布于 2010-08-19 00:01:32

这样,您就不需要对列表进行两次迭代。但它只适用于2k年或更高的年份,我假设您希望年份作为整数列表。

代码语言:javascript
复制
List<string> months = new List<string>();
List<int> years = new List<int>();


dates.ForEach(s =>
            {
                months.Add(s.Substring(0, 3));
                years.Add(2000 + int.Parse(s.Substring(4, 2)));
            });
票数 4
EN

Stack Overflow用户

发布于 2010-08-18 23:59:31

如果您的日期在2000年之后,您可以执行以下操作:

代码语言:javascript
复制
dates.Select(d => d.Split('-')).Select(parts => new { Month = parts[0], Year = "20"+parts[0]})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3514030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档