关于c#:需要从字典中删除和排序键编号和颜色项

Need to remove and sort key numbers and color items from dictionary

我有一本字典,像:

1
var map = new Dictionary<int, ColorType>();

其中colortype是枚举红、黄、白

它与一组数字配对,如:

1
2
3
var lstNumbers = Enumerable
            .Range(1, 100).OrderBy(n => Guid.NewGuid().GetHashCode())
            .ToArray();

我需要做以下工作:

  • 删除所有红色的偶数
  • 删除所有黄色奇数
  • 删除所有可被3除的白色数字
  • 按数字升序排列列表,然后按颜色(红色

    这是一种有效的方法吗?

    • 有没有观察到您的代码效率低下?如果它起作用怎么办?
    • 我不明白lstNumbers与这个问题有什么关系。这些操作中有一些是针对列表和字典的吗?
    • 您将无法获得比步骤4中使用的排序方法更高效的结果。排序是一种众所周知的效率,在最快的方法上没有已知的改进。步骤1-3都是O(N),因此与过程的效率无关。
    • 从C字典中删除与谓词匹配的多个项的最佳方法可能重复?
    • 我想用这个,但不确定这是不是正确的方法。toremove=lstnumbers.array.select(x=>new keyValuePair((int)x.lstnumbers,x.colorType)).toList();


    对于第一个三:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    foreach(KeyValuePair<int, ColorType> entry in map.ToList()) {

        if (entry.Key % 2 == 0 && entry.Value == ColorType.Red) { // Even and Red
            map.Remove(entry.Key);
        }

        if (entry.Key % 2 == 1 && entry.Value == ColorType.Yellow) { // Odd and Yellow
            map.Remove(entry.Key);
        }

        if (entry.Key % 3 == 0 && entry.Value == ColorType.White) { // Divisible by 3 and White
            map.Remove(entry.Key);
        }
    }

    作为为sorting的词典,可以在这里找到答案

    • 不能同时迭代和修改集合。
    • 是的,我的错,在发帖前没有测试过。更新
    • 它是map.toarray(),因为我在使用数组还是很重要?
    • 另外,在我的显示部分,我得到了一个keynotfound异常.forEach(lstnumbers中的var num)console.writeline($"num,map[num]");console.readline();
    • 字典中的某些条目已被删除(在前一个循环中),因此当您在lstnumbers中的数字列表上执行map[num]操作时,将得到keynotfound异常
    • 我不知道为什么我的评论没有格式化成代码块格式。我确信我没有正确地输入。我只是想把它缩进4个空格,就像你在发帖时做的那样,但效果不一样。还在学习论坛的功能。
    • 在打印之前,您需要循环使用字典来打印值,或者检查字典中是否存在该值。
    • @在注释中,用反勾号(` 字符)包装代码块。
    • 埃多克斯1〔2〕
    • @奇怪的是,鲁弗斯的标题评论告诉我的迷你降价格式后,问。哈哈,不过还是谢谢你!
    • @谢谢你的帮助,这让我绞尽脑汁有一段时间了!@鲁弗斯,这是正确的打印我的价值观,谢谢!
    • 我找到了一个很好的排序方法,但后来意识到我没有具体的分类方法细节。到目前为止,我有:'list>mylist=map.tolist();mylist.sort(delegate(keyvaluepairpair1,keyvaluepairpair2)返回pair1.value.compareto(pair2.value);)';我需要排序按:1:按升序排列列表编号,按红色<黄色<白色排序。我如何应用这些规范?
    • Would it be map.ToArray() since I'm using an array or does it matter?ToArray比justeastacka的ToList稍慢。