RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1251564
Accepted
Potion
Potion
Asked:2022-03-04 20:52:27 +0000 UTC2022-03-04 20:52:27 +0000 UTC 2022-03-04 20:52:27 +0000 UTC

对字典进行排序,从末尾提取一个值并在开头插入它

  • 772

有一本字典

Dictionary<string, string> langNames = new Dictionary<string, string>()
        {

            {"ru", "Русский"},
            {"en", "english"},
            {"eo","Esperanto"},
            {"fr-FR","français"},
            {"de","Deutsch"},
            {"zh","漢語"},
            {"ja","日本語"},
            {"ko","한국어"},
            {"hi","हिन्दी, हिंदी"},
            {"it","Italiano"},
            {"es","Español"},
            {"ar","العربية"},
            {"el","ελληνικά"},
            {"bn","বাংলা"},
            {"pt","Português"},
            {"uk","Українська"}

    };

还有第二个字典有相同的键,但有点混淆

Dictionary<string, string> ShuffledLangs = new Dictionary<string, string>()

        {

            {"de","a"},
            {"zh","b"},
            {"ja","x"},
            {"ko","r"},
            {"hi","k"},
            {"it","d"},
            {"es","n"},
            {"ar","q"},
            {"el","e"},
            {"bn","b"},
            {"pt","m"},
            {"uk","n"},
            {"ru", "n"},
            {"en", "b"},
            {"eo","n"},
            {"fr-FR","n"},

    };

并且您需要使用第二个字典顺序执行 2 个操作

1)对其进行排序,使键与原始键相同(ru,en,eo等)

2)然后取一个元素,例如键“es”,并将其移动到字典的开头。

最终结果应该是这样的

        {
            {"es","n"},
            {"ru", "n"},
            {"en", "b"},
            {"eo","n"},
            {"fr-FR","n"},
            {"de","a"},
            {"zh","b"},
            {"ja","x"},
            {"ko","r"},
            {"hi","k"},
            {"it","d"},
            {"ar","q"},
            {"el","e"},
            {"bn","b"},
            {"pt","m"},
            {"uk","n"},
           

    };

因为 字典默认没有排序,有一个很长的变体,即 编写一个比较器,查看这个或那个字典键与参考键相比有多高并返回 +1 或 -1,并根据它使用 OrderBy,但也许这可以通过更优雅的 LINQ 查询以某种方式完成?

而第二点也是不可理解的——字典没有Insert方法,因为 没有索引,但是枚举它仍然以与创建时相同的顺序返回它。是否有必要以某种方式重新创建字典,在初始化期间在开头抛出所需的单元格?或者是否还有一个简单的单行 LINQ 查询可以解决这个问题?

c#
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. user177221
    2022-03-18T00:12:52Z2022-03-18T00:12:52Z

    Dictionary在C#中是不排序的,不一定按加法的顺序存储pairs,里面的“顺序”可以随时去。这是一个简单的例子:

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp16
    {
        class Program
        {
            static void Main(string[] args)
            {
                var test = new Dictionary<int, string>();
                test.Add(3, "three");
                test.Add(2, "two");
                test.Add(1, "one");
                test.Add(0, "zero");
    
                test.Remove(2);
                test.Add(5, "five");
    
                foreach (var pair in test)
                {
                    Console.WriteLine(pair.Key);
                }
            }
        }
    }
    

    而不是您期望的输出

    3
    1
    0
    5
    

    此代码在我的机器上输出

    3
    5
    1
    0
    
    • 0
  2. Best Answer
    Potion
    2022-03-04T22:54:26Z2022-03-04T22:54:26Z

    没有比较器和没有 Linq 是可能的 - 只需两个周期。

      public static Dictionary<string, string> SortAsLangName(Dictionary<string, string> source, string upLocale)
            {
                Dictionary<string, string> finalDict = new Dictionary<string, string>();
    
                finalDict.Add(upLocale, source[upLocale]); //Кладем в свежий словарь первым предметом тот-ключ значение, который мы хотим видеть первым.
                foreach (var langName in langNames)// Проходим по словарю, где все ключи в нужном нам порядке
                {
                    if (langName.Key.Equals(upLocale))
                    {
                        continue;
                    }
                    foreach (var src in source)//Проходимся по перемешанному словарю, и если ключ исходного в этой итерации совпадает с ключем перемешенного, то добавляем ключ-значение в финальный словарь
                    {
                        if (src.Key.Equals(langName.Key))
                        {
                            finalDict.Add(src.Key, src.Value);
                        }
                    }
                }
    
                return finalDict;
            }
        
    

    因此,这两个条件都满足了——字典的第一个成员是我们在方法中传递键的那个,其余的按照与 langNames 字典中相同的方式排序

    • -2

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5