gpt4 book ai didi

c# - 如何在列表中获得更大的一天?

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:12 26 4
gpt4 key购买 nike

我有 1 个列表 <> 在 C# 中包含许多天/月/年。我想在列表中获得最大的一天(基于月/年进行比较)。怎么做到的?

喜欢:

2/5/2015 6/5/2015 16/8/2015 30/7/2015 //note that is from each time in DTOSaveFromFile

最大的一天是:16/8/2015

这是我的代码:

List<DTOSaveFromFile> lst = Load();

public static List<DTOSaveFromFile> Load()
{
string[] data = File.ReadAllLines(dataPath);
return (from i in data select new DTOSaveFromFile(i)).ToList<DTOSaveFromFile>();
}

foreach (var rows in lst)
{
}

public class DTOSaveFromFile : List<string>
{
public string reportName { get; set; }
public string eMail { get; set; }
public string time { get; set; }

public DTOSaveFromFile(string _reportname, string _email, string _time)
{
reportName = _reportname;
eMail = _email;
time = _time;
}
}

最佳答案

最终解决方案

您可以使用 LINQ 在一行中完成:

DateTime biggest = lst
.Select(x => DateTime.ParseExact(x.time, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture)) //to get the list of `string` of `time` from your List<DTOSaveFromFile> + //To convert it to DateTime
.Max(); //Get the max among the DateTime

解释

(添加是因为提问者需要更多说明。)

这就是你实际做的:

  1. 获取IEnumerable<DateTime>来自 List<DTOSaveFromFile>
  2. 对于每个 DTOSaveFromFile , 得到它的 DTOSaveFromFile.time这是 string (注意 x.time ),
  3. 你得到了 DateTime每个值 x.time string通过使用 DateTime.ParseExact权利 format (在本例中为 d/M/yyyy)。
  4. 一旦所有DateTime已放入单个 IEnumerable 中,使用 Max() 找到其中的最大值.

分步指导

  1. 基本上如果你这样做了 Select(x => x.time)List<DTO> 上其中 DTO类包含 time字段是 string (像你的情况),那么你有一个 string 的“列表”(或更恰本地称为 IEnumerable)而不是 DTO 列表,这是你的 time 的类型 field 。因此

    List<string> timeList = lst.Select(x => x.time).ToList();

    会给你List<string> timeList其中仅包含 time (string)。

2-3。接下来,对于每个 stringtimeList , 你需要处理到 DateTime找到其中的最大值。你是怎么做到的?通过使用 DateTime.ParseExact对于每个 string使用正确的 format DateTime.ParseExact 的参数,即 "d/M/yyyy"

因此,你可能会想做这样的事情

List<DateTime> dtlist = new List<DateTime>();
foreach (string time in timeList){
DateTime dt = DateTime.ParseExact(x.time, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
dtlist.Add(dt);
}

哪个会给你List<DateTime>称为 dtlist

但是在Linq , 你可以没有 foreach循环!

Select(x => DateTime.ParseExact(x, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture))
  1. 最后,给定 dtlist ,你想找到最大值。你只需要使用 Max得到它。

    DateTime biggest = dtlist.Max();

暴力破解 LINQ

现在实际的解决方案是将所有这些步骤组合成一个 LINQ行。

那么你在这里做什么:

List<string> timeList = lst.Select(x => x.time).ToList(); //Step 1

List<DateTime> dtlist = new List<DateTime>(); //Step 2-3
foreach (string time in timeList){
DateTime dt = DateTime.ParseExact(x.time, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
dtlist.Add(dt);
}

DateTime biggest = dtlist.Max(); //Step 4

等于一行LINQ

DateTime biggest = lst
.Select(x => DateTime.ParseExact(x.time, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture)) //to get the list of `string` of `time` from your List<DTOSaveFromFile> + //To convert it to DateTime
.Max(); //Get the max among the DateTime

最终解决方案(再次)

鉴于您的 List<DTOSaveFromFile>

为了便于说明,使用两个 selectsLINQ你可以像这样在一行中完成:

DateTime biggest = lst.Select(x => x.time) //to get the list of `string` of `time` from your List<DTOSaveFromFile>
.Select(x => DateTime.ParseExact(x, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture)) //To convert it to DateTime
.Max(); //Get the max among the DateTime

您的值在 biggest 中变量。

请注意,现在您可以使用 select 进一步简化答案:

DateTime biggest = lst
.Select(x => DateTime.ParseExact(x.time, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture)) //to get the list of `string` of `time` from your List<DTOSaveFromFile> + //To convert it to DateTime
.Max(); //Get the max among the DateTime

关于c# - 如何在列表中获得更大的一天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34647229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com