如何在Tuple中找到Item2的最大值

本文关键字:Item2 最大值 DateTime Tuple string | 更新日期: 2023-09-27 17:54:21

好吧,我以前也这么做过,但是我脑子一片空白,所以我希望so的大脑袋能帮我一把。

我有一个Tuple<string, DateTime>,其中字符串是FileName, DateTime是文件由进程发送的最后日期。文件名将不相同,但它们都确认某种类型的文件掩码(例如,我可能有几个条目,其中string符合文件掩码"????AD??")。我想为给定的文件掩码找到最近的DateTime

我不记得我以前是如何解决这个问题的,而且是在以前的雇主那里,所以我甚至不能替换我的旧代码。如有任何帮助,我将不胜感激。

澄清(因为这可能有点迟钝)

给定

:

(0501AD01, 5/2/2010)
(0502AD02, 5/3/2010)
(0503AD03, 5/4/2010)
<snip>
(0803AD99, 8/4/2010)
(0804AD00, 8/5/2010)
(0805AD01, 8/6/2010)

我想返回8/6/2010

如何在Tuple<string, DateTime>中找到Item2的最大值

tuples是一个IEnumerable<Tuple<string, DateTime>>还有一个fileMask,还有一个方法

bool MatchesFileMask(FileMask fileMask, string filename)

如果filename匹配文件掩码fileMask,则返回true。然后你可以说:

var mostRecent = tuples.Where(x => MatchesFileMask(fileMask, x.Item1)
                       .Max(x => x.Item2);

用LINQ:

var data = new List<Tuple<string, DateTime>>(); // add some data
var maxTimestamp = data.Where(t => MatchesFileMask(t.Item1)).Max(t => t.Item2);

当然,我欺骗了假设有一个MatchesFileMask谓词已经写了,但它不是太难做出一个简单的全局风格的掩码正则表达式:

var mask = "????AD??";
var regex = new Regex(mask.Replace('?', '.').Replace("*", ".*"));
var predicate = new Func<string, bool>(regex.IsMatch);
var maxTimestamp = data.Where(t => predicate(t.Item1)).Max(t => t.Item2);