gpt4 book ai didi

具有 where 条件的 C# LINQ GroupBy

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:33 25 4
gpt4 key购买 nike

您知道在某些“where”+ 有一个不满足 where 条件的元素列表之后获取列表的最简单有效的方法是什么吗?

具体来说:

这是我的工作 linq。它获取文件名,将其拆分为名称和扩展名元组列表,并且:- 名称应该是唯一的- 扩展名是基于排序列表(所以首先是 gif,如果这个名字没有 gif,则采用 png,然后是 jpg,然后是 jpeg,不支持任何其他扩展名)

/// <summary>
/// Supported image extensions.
/// The list is sorted cause we have priorities here.
/// </summary>
SortedList<short, string> supportedExtensions = new SortedList<short, string> { { 1, "gif" }, { 2, "png" }, { 0, "jpg" }, { 4, "jpeg" } };


var filesList = Directory.GetFiles(string.Concat(Directory.GetCurrentDirectory(), "\\images", "\\"))
.Select(s => Tuple.Create(s.Substring(s.LastIndexOf(@"\") + 1, s.LastIndexOf(@".") - 1 - s.LastIndexOf(@"\")), s.Substring(s.LastIndexOf(@".") + 1)))
.Where(x => supportedExtensions.Values.Contains(x.Item2)) // only supported extensions here!
.GroupBy(g => g.Item1) // we are assured that every group has proper and at least one value
.Select(group => group.OrderBy(o => supportedExtensions.IndexOfValue(o.Item2)).First()); // get only one extension in each name group by priorities as in sorted list

线索是我还想要不符合条件的filesList,以便在警告消息中写入那些文件名(然后可以忘记它们)。

我试过这样做:

var fileListGroupedBySupportedExtension = Directory.GetFiles(Directory.GetFiles(string.Concat(Directory.GetCurrentDirectory(), "\\images", "\\")))
.Select(s => Tuple.Create(s.Substring(s.LastIndexOf(@"\") + 1, s.LastIndexOf(@".") - 1 - s.LastIndexOf(@"\")), s.Substring(s.LastIndexOf(@".") + 1)))
.GroupBy(g => supportedExtensions.Values.Contains(g.Item2));

var fileListWithSupportedExtension = fileListGroupedBySupportedExtension
.Where(gr => gr.Key == true);

但我不知道如何进入这个列表并在另一个地方创建或选择,所以我显然做错了什么:)

在处理此类验证/linq 内容时,这种方式是否正确?

最佳答案

首先要注意:请使用System.IO.Path 方法。他们将使生活变得更加轻松。您可以使用 Path.GetFileNameWithoutExtension 获取不带扩展名的文件名,并通过 Path.GetExtension 获取扩展名。这使您更容易理解您在做什么。

其次,问题是您要丢弃所有没有扩展名的文件。您可以避免这种情况并简单地分配一个空扩展名,如果该扩展名不在您的预期范围内并为其分配最低优先级。如果扩展名不受支持,这基本上会在第一次尝试时将您的 where 与另一个将扩展名重置为 nullselect 交换。

第三,至少当您的扩展列表不动态变化时,您也可以使用常规的 List。这比 SortedList 的开销更小。

关于具有 where 条件的 C# LINQ GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691613/

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