首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ICOMPARER for VB.NET

使用ICOMPARER for VB.NET
EN

Stack Overflow用户
提问于 2015-01-22 04:06:31
回答 1查看 569关注 0票数 1

我有一个(Myclass的)列表,我想根据我的类中的一个属性(p属性为字符串)进行排序,并根据顺序确定值Dim myListeValues() AS String = {"ccc","yyy","aaa"}我希望将IComparer接口用作:

代码语言:javascript
复制
Public Class MyClass 
   Public Property p As String 

我想做的是:

代码语言:javascript
复制
Private Class MyComparer Implements Icomparer(of MyClass ) 
Public Function Compare(x AS MyClass ) AS Integer Implements IComparer (Of MyClass ).Compare 

          Return   ???? 


   i want this order : 1) x.p = "ccc" 
                     2) x.p = "yyy" 
                     3) x.p = "aaa"


End FunctionEnd Class


 how can I do that?
EN

回答 1

Stack Overflow用户

发布于 2015-01-22 04:47:17

您知道要比较的值域吗?也就是说,您是否知道它们将是"ccc“、"yyy”和"aaa“(或者可能是其他值,但所有可能的值都是预先知道的)?

如果答案是肯定的,那么我会考虑使用一个字典,其中键是您已知值,值代表顺序。然后,在比较实现中,检索每个输入字符串的值并返回比较结果。

请原谅我可怜的VB,因为我不使用VB.Net,我也不想只发布一个C#版本。我想你能明白我的意思。实际上,您正在创建一个查找表,它将您的已知字符串映射到每个字符串的“序数”值(或它在所有已知字符串集中的位置)。在比较MyClass的过程中,从被比较的两个MyClass实例中获取Prop1的值(因为它看起来像您想要比较的值)。通过在字典中查找字符串,将每个字符串值转换为Integer。然后,您可以从一个Integer中减去另一个Integer,以获得比较结果。

需要考虑的一些事情:

  1. 是否希望您的比较不区分大小写(即"aaa“== "AAA")。如果是这样,您可能希望使用不区分大小写的dictionary.
  2. You可以比较(如果必要,不区分大小写)要比较的两个对象的字符串属性,如果相等,则简单地返回0。不需要先将字符串值转换为整数。
  3. 如果要比较的一个(或两个) MyClass实例的值不在字典中(如果可能发生这种情况),您可能需要考虑会发生什么情况。
  4. 如果一个或两个对象的String属性为null或空,则可能需要一些特殊处理。

祝好运!

代码语言:javascript
复制
Private Class MyComparer Implements IComparer(of MyClass ) 
    Private Dictionary dict = new Dictionary of (String, Integer) (System.StringComparer.OrdinalIgnoreCase)

    Private Sub New()
        dict.Add("ccc", 0)
        dict.Add("yyy", 1)
        dict.Add("aaa", 2)
    End Sub

    Public Function Compare(x AS MyClass, y AS MyClass ) AS Integer Implements IComparer (Of MyClass ).Compare

        Boolean xb = String.IsNullOrWhitespace(x.Prop1)
        Boolean yb = String.IsNullOrWhitespace(y.Prop1)

        If xb And !yb Then Return -1 'x.Prop1 null or empty, y.Prop1 has a value
        If !xb And yb Then Return 1  'x.Prop1 has a value, y.Prop1 has a value

        If String.Compare(x.Prop1, y.Prop1, StringComparison.OrdinalIgnoreCase) = 0 Then Return 0

        Integer xi = dict[x.Prop1]
        Integer yi = dict[y.Prop1]

        Return xi - yi
    End Function
End Class
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28075914

复制
相关文章

相似问题

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