首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对列表进行自定义排序

如何对列表进行自定义排序
EN

Stack Overflow用户
提问于 2010-11-26 17:41:42
回答 3查看 157关注 0票数 1

我有一个由以下元素组成的列表

代码语言:javascript
复制
<1, 2-3, 4-5, >6

当我对它进行排序时,我得到

代码语言:javascript
复制
<1,>6,2-3,4-5

但希望以正确的顺序得到它。

我编写了这个代码,它工作正常,但我发现它非常冗长,我希望将它减少到2,3行代码

代码语言:javascript
复制
_data.Sort(delegate(SourceEntity a1, SourceEntity a2)
{
  if (a1.Dimension1.StartsWith("<") && a2.Dimension1.StartsWith("<")) return 0;
  else if (a1.Dimension1.StartsWith(">") && a2.Dimension1.StartsWith(">")) return 0;
  else if (a1.Dimension1.StartsWith("<") && a2.Dimension1.StartsWith(">")) return -1;
  else if (a1.Dimension1.StartsWith(">") && a2.Dimension1.StartsWith("<")) return 1;
  else if (a1.Dimension1.StartsWith("<")) return -1;
  else if (a1.Dimension1.StartsWith(">")) return 1;
  else if (a2.Dimension1.StartsWith("<")) return 1;
  else if (a2.Dimension1.StartsWith(">")) return -1;
  else return a1.Dimension1.CompareTo(a2.Dimension1);
});

SourceEntity包含一个名为Dimension1的属性,该属性包含我试图对其排序的值。

EN

回答 3

Stack Overflow用户

发布于 2010-11-26 21:21:44

可以使用正则表达式筛选出非数字字符,然后进行比较:

代码语言:javascript
复制
_data.Sort(delegate(SourceEntity a1, SourceEntity a2)
{
    Regex nonNumericCharacters = new Regex(@"\D");
    return nonNumericCharacters.Replace(a1.Dimension1, string.Empty).CompareTo(nonNumericCharacters.Replace(a2.Dimension1, String.Empty));
});
票数 0
EN

Stack Overflow用户

发布于 2010-11-26 21:39:03

看起来,词法排序不能满足您的需要的唯一情况是将"<“与一个数字进行比较。因此,以下内容应该足够了:

代码语言:javascript
复制
return ((a1.Dimension1.StartsWith("<") && !a2.Dimension1.StartsWith("<"))
    ? -1 : a1.Dimension1.CompareTo(a2.Dimension1));
票数 0
EN

Stack Overflow用户

发布于 2010-11-28 01:24:49

代码语言:javascript
复制
 var trimChars = new[] { '<', '>' };

 _data.Sort((a1, a2) => 
      a1.Dimension1.TrimStart(trimChars)
        .CompareTo(a2.Dimension1.TrimStart(trimChars)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4284112

复制
相关文章

相似问题

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