首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#用字符串(键)的数值对字典进行排序

C#用字符串(键)的数值对字典进行排序
EN

Stack Overflow用户
提问于 2022-06-28 06:38:32
回答 1查看 120关注 0票数 -2

有趣的问题。我试图按数值对Dictionary<string, string>进行排序。它适用于List<string>而不是Dictionary,我在这里做错了什么?

代码语言:javascript
运行
复制
Dictionary<string, string> s = new Dictionary<string, string>() {
  {   "a",  "a" },
  { "100",  "1" },
  {   "2",  "2" },
  {  "10", "10" },
};

List<string> g = new List<string> { 
  "1", "10", "a", "1000" 
};

var v = 0;

var problem = s.OrderBy(x => int.TryParse(x.Key, out v));

// outputs original order
var works = from c in g
         orderby int.TryParse(c,out v)
          select c;

// outputs sorted order a, 1, 10, 1000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-28 07:10:59

你可以试试这样的东西:

代码语言:javascript
运行
复制
var problem = s
  .OrderBy(pair => int.TryParse(pair.Key, out var parsed) 
     ? parsed          // Take Key value as it is
     : long.MinValue); // Treat pair as the topmost

在这里,我们尝试从键值pair解析pair,如果失败,我们将这对放在顶部(为了与可能的int.MinValue键混合,我使用了long.MinValue )。您可能需要添加.ThenBy

代码语言:javascript
运行
复制
var problem = s
  .OrderBy(pair => int.TryParse(pair.Key, out var parsed) 
     ? parsed          // Take Key value as it is
     : long.MinValue)  // Treat pair as the topmost
  .ThenBy(pair => pair.Key);

如果您想对非数字键和数字进行排序,例如:

代码语言:javascript
运行
复制
  Dictionary<string, string> demo = new() {
    {   "a",  "a" },
    { "100",  "1" },
    {   "2",  "2" },
    {   "b",  "a" },
    {  "10", "10" },
    {   "c",  "a" },
  };
 
  var result = demo
    .OrderBy(pair => int.TryParse(pair.Key, out var parsed) 
       ? parsed 
       : long.MinValue)
    .ThenBy(pair => pair.Key); 

  Console.Write($"{string.Join(Environment.NewLine, result)}");

输出:

代码语言:javascript
运行
复制
[a, a]
[b, a]
[c, a]
[2, 2]
[10, 10]
[100, 1]

编辑:如果你想把数字放在第一位,你要做的就是把long.MinValue改为long.MaxValue

代码语言:javascript
运行
复制
  var result = demo
    .OrderBy(pair => int.TryParse(pair.Key, out var parsed) 
       ? parsed 
       : long.MaxValue)
    .ThenBy(pair => pair.Key); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72781747

复制
相关文章

相似问题

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