如何按数字排序包含数字的字符串数组

时间:2016-03-01 20:18:41

标签: arrays vb.net string integer

因为标题已经暗示我只想知道是否可以通过这些字符串中包含的数字对字符串数组中的元素进行排序。

在我的程序中,我能够读取文件的内容,如下所示:

Adele got 2,Jack got 8

然后,我可以通过逗号将此文件拆分为名为names的字符串数组:

Dim fileReader As System.IO.StreamReader
        Dim line As String
        fileReader = My.Computer.FileSystem.OpenTextFileReader(ClassA)
        line = fileReader.ReadLine
        names = line.Split(",")
        For Each element As String In names
          Array.Sort(names)
          Console.WriteLine(element)
        Next

我还能够按字母顺序对文件进行排序,输出结果为:

Adele got 2
Jack got 8

然而,我想知道的是,是否可以根据数字对这些字符串进行排序,以便输出看起来像:

Jack got 8
Adele got 2

我还考虑使用正则表达式提取数字,将它们解析为整数,将它们保存到变量然后将它们添加到数组中并比较数组,但它们必须是更简单的方式D:

任何帮助都非常感谢大家:)

2 个答案:

答案 0 :(得分:1)

林克要救了。我添加到数据中以确保它可以处理2位数字,因为2个元素是一个微弱的测试:

  if(!localStorage.getItem("myDataList")){
   localStorage.setItem("myDataList", JSON.stringify(myDataList));
}

if(localStorage.getItem("myDataList")){
   myUserObj = JSON.parse(localStorage.getItem("myDataList")).myDataList;
}

结果:

Dim phrases As String() = {"Adele got 2", "Zalgo got 9", "Jack got 8", "Ziggy got 11"}

phrases = phrases.OrderByDescending(Function(q) Int32.Parse(q.Split(" ").Last)).ToArray()

For Each s In phrases
    Console.WriteLine(s)
Next

答案 1 :(得分:0)

是的,这是可能的。添加比较器函数,然后使用它进行排序。这是比较器:

/* Accordion effect with two custom attributes */
  $(function() {
    $( "#accordion" ).accordion({
        header:"h6",
        heightStyle:"content"
    });
  });

将其添加到您的代码中。你可以像这样使用它:

Private Shared Function WhoGotComparer(ByVal x As String, ByVal y As String) As Integer
    Dim parseX() As String = Split(x, " got ")
    Dim parseY() As String = Split(y, " got ")
    If parseX.Length <> 2 Or parseY.Length <> 2 Then Return 0
    Return CInt(parseY(1)).CompareTo(CInt(parseX(1))) 'Performs an integer comparison.
End Function

这会导致数组按降序排序。基于这个例子,我认为这就是你想要的。如果要将顺序更改为升序,可以在比较器函数中反转它们x和y参数的作用,或者可以否定比较结果。