【问题标题】:Correspond first line of arrays with second line VB将第一行数组与第二行 VB 对应起来
【发布时间】:2016-09-05 15:13:03
【问题描述】:

我有一个文件,第一行显示歌曲名称,第二行显示流派,第三行显示时间。

例子

All You Need is Love-Beatles
Rock
4.25

这样下去。我需要某种方式将歌曲与流派对应,然后使用数组将它们显示在名为 lstPlayList 的列表框中

我有

strSongs(intCount) = objReader.ReadLine()
strGenre(intCount) = objReader.ReadLine()
dblLength(intCount) = Convert.ToDouble(objReader.ReadLine())

用于存储每个变量,但我无法将歌曲附加到流派

【问题讨论】:

  • 您有什么问题?有例外吗?你在期待什么?
  • 说用户从组合框中选择了流派“摇滚”。我的期望是让程序找到“All You Need is Love-Beatles”和所有其他摇滚歌曲文件并将其显示到列表框中。
  • 不要将与事物相关的数据分解为多个数组。 Classes and Lists 将数据集中在一起,便于管理
  • 将其放入数据表中。这将是最容易管理的
  • 我同意将其放入数据表中。然后,您可以使用 LINQ 轻松获取属于某个流派的所有歌曲

标签: arrays vb.net


【解决方案1】:

您确实可以像其他评论者所说的那样,创建一个数据库,而不是为一个项目设置三个单独的数组,但如果您不想走那么远,试试这个。

在表单的类定义列表的顶部创建一个结构:-

Structure Song
    Dim Name As String
    Dim Genre As String
    Dim Duration As Single
End Structure

这有效地创建了一个新的数据类型。

接下来创建一个这样的数据类型列表:-

Dim Songs As New List(Of Song)

当您从文件中读取数据时,您可以像这样将数据添加到列表中,而不是包含在问题中的数据:-

    Dim newSong As Song
    newSong.Name = objReader.ReadLine()
    newSong.Genre = objReader.ReadLine()
    newSong.Duration = Convert.ToDouble(objReader.ReadLine())

现在您有了一个包含所有数据的列表,您可以搜索该列表并将结果作为所有结果的新列表返回。这是执行列表搜索和返回的函数:-

Private Function SearchSongsByGenre(searchGenre As String) As List(Of Song)
    Dim returnList As New List(Of Song)
    For Each searchSong As Song In Songs
        If searchSong.Genre = searchGenre Then
            returnList.Add(searchSong)
        End If
    Next
    Return returnList
End Function

要在另一个 sub 中使用它,只需在 sub 中创建一个名为..say.. SearchResults 的列表:-

Dim SearchResults As New List(of Song)
Searchresults = SearchSongsByGenre("Rock")

现在您有了所有具有摇滚

流派的歌曲列表

比搜索一个数组并从 3 个可能不同步的数组中获取数据要安全得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2018-11-18
    相关资源
    最近更新 更多