首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从键值对列表中检索所有连续项?

如何从键值对列表中检索所有连续项?
EN

Stack Overflow用户
提问于 2022-01-19 22:52:04
回答 1查看 63关注 0票数 -1

这是名单。最后,我们必须有6个项目在其中。

代码语言:javascript
运行
复制
List<KeyValuePair<Element, int» myList = new List<KeyValuePair<Element, int»();

这样做是行不通的:

代码语言:javascript
运行
复制
           foreach (KeyValuePair<Element, int> i in myList)

                if (i.Value - [i- 1].Value == 1)
                {
                     //
                }

这个也是。它只给出一个项目:

代码语言:javascript
运行
复制
 List<KeyValuePair<Element, int>> filteredList = new List<KeyValuePair<Element, int>>();
           

        for (int i = 1; i < myList.Count; i++)
        {
            if ((myList[i].Value - myList[i - 1].Value) == 1)
            {
                    filteredList.Add(myList[i - 1]);
            }
        }

现在的列表是这样的:

代码语言:javascript
运行
复制
[Autodesk.Revit.DB.Architecture.Room, 2], 
[Autodesk.Revit.DB.Architecture.Room, 2], 
[Autodesk.Revit.DB.Architecture.Room, 2], 
[Autodesk.Revit.DB.Architecture.Room, 2], 
[Autodesk.Revit.DB.Architecture.Room, 2], 
[Autodesk.Revit.DB.Architecture.Room, 2], 
[Autodesk.Revit.DB.Architecture.Room, 7], 
[Autodesk.Revit.DB.Architecture.Room, 7], 
[Autodesk.Revit.DB.Architecture.Room, 7], 
[Autodesk.Revit.DB.Architecture.Room, 7], 
[Autodesk.Revit.DB.Architecture.Room, 7], 
[Autodesk.Revit.DB.Architecture.Room, 7], 
[Autodesk.Revit.DB.Architecture.Room, 8], 
[Autodesk.Revit.DB.Architecture.Room, 8], 
[Autodesk.Revit.DB.Architecture.Room, 8], 
[Autodesk.Revit.DB.Architecture.Room, 8], 
[Autodesk.Revit.DB.Architecture.Room, 8], 
[Autodesk.Revit.DB.Architecture.Room, 8]
EN

回答 1

Stack Overflow用户

发布于 2022-01-20 02:22:23

下面是一个使用Linq的一线解决方案:

代码语言:javascript
运行
复制
var filtered = myList.Select(kvp => kvp.Value).Distinct().Select(v => myList.First(kvp => kvp.Value == v)).ToList();

请记住,这个解决方案是O(N^2),这个问题可以很容易地解决O(N),但是考虑到列表的大小,这并不重要。

下面是一个更具人类可读性的解决方案: O(N):

代码语言:javascript
运行
复制
    var dictionary = new Dictionary<int, Room>();
    foreach (var (key,value) in myList)
    {
        if (!dictionary.ContainsKey(value)) dictionary[value] = key;
    }

    var filtered = dictionary.Select(kvp => new KeyValuePair<Room, int>(kvp.Value, kvp.Key)).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70778759

复制
相关文章

相似问题

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