按字母顺序对数组排序

时间:2020-06-24 11:34:08

标签: arrays vb.net sorting

我一直在寻找Visual Basic.NET中的数组排序,但是我的代码始终返回null。即我得到一个包含以下内容的文本文件:

Ahmed 50 (Not_available)
Thor 44 (Available)
Clark 85 (Not_available)
Sally 93 (Available)

我想按第一个单词的第一个字母对它们进行排序。所以输出将是:

Ahmed 50 (Not_available)
Clark 85 (Not_available)
Sally 93 (Available)
Thor 44 (Available)

首先,我使用.Split(" ")方法将它们分成数组。然后,我使用.Trim()卸下所有回车。最后,我使用Array.Sort()

对它们进行了排序

有我的代码:

Dim Data As String() = My.Computer.FileSystem.ReadAllText("store.txt").Split(vbCrLf)
Try
   For Count = 0 to Data.Length - 1
   Data(Count).Trim()
Next
Catch ex As Exception
End Try

Array.Sort(Data)

当我使用MsgBox(Data(0))调用元素时,返回的 为空。

代码中是否存在任何错误?任何答复将不胜感激。谢谢

2 个答案:

答案 0 :(得分:0)

您可以在一行中完成所有操作:

Dim data = File.ReadLines("file path here").
                Select(Function(s) s.Trim()).
                OrderBy(Function(s) s).
                ToArray()

值得注意的是,您实际上并没有修剪数据,因为该Trim方法无法就地工作。实际上,它会返回一个新的String,因此您需要将其分配回数组元素。

答案 1 :(得分:0)

Catch不好。它只是吞没了错误,您不知道出了什么问题。

检查.Split方法的重载。 https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-3.1#overloads vbCrLF实际上是2个字符。它是一个字符串。将其更改为Char数组会使Split感到高兴。添加可选的StringSplitOptions.RemoveEmptyEntries参数可消除由Cr(回车)和Lf(换行)分割造成的空白行

使用Option严格关闭方法(不转换为Char数组)会产生奇怪的结果。严格选项应该始终处于启用状态。

Private Sub OPCode()
    Dim Data As String() = My.Computer.FileSystem.ReadAllText("store.txt").Split(vbCrLf.ToCharArray, StringSplitOptions.RemoveEmptyEntries)
    Array.Sort(Data)
    For Each s In Data
        Debug.Print(s) 'see results in Immediate Window
    Next
End Sub

使用System.IO File类更简单,最新。将第一行替换为

    Dim Data = File.ReadAllLines("store.txt")

并添加

Imports System.IO

在文件顶部。