如何在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
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);