有一本字典
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 查询可以解决这个问题?
Dictionary在C#中是不排序的,不一定按加法的顺序存储pairs,里面的“顺序”可以随时去。这是一个简单的例子:而不是您期望的输出
此代码在我的机器上输出
没有比较器和没有 Linq 是可能的 - 只需两个周期。
因此,这两个条件都满足了——字典的第一个成员是我们在方法中传递键的那个,其余的按照与 langNames 字典中相同的方式排序