2017-06-16 99 views
0

在我的原始代码中,我有一个包含2列的列表对象WordPercent。我对列表进行排序,但只想要回只包含Word中VB.NET将二维列表复制到一维列表中

以下列表是一些示例代码分解成简单的东西:

Public Function SortMyWords() as list(of string) 
    Dim Words As WordsToSort 
    Dim ListofWords As New List(Of WordsToSort) 

    Words.Word = "John" 
    Words.Percent = "10" 
    ListofWords.Add(Words) 

    Words.Word = "Robert" 
    Words.Percent = "1" 
    ListofWords.Add(Words) 

    ListofWords = ListofWords.OrderBy(Function(x) x.Percent).ToList() 
End Sub 

Public Structure WordsToSort 
    Public Word As String 
    Public Percent As String 

    Public Sub New(ByVal _word As String, ByVal _percent As String) 
     Word = _word 
     Percent = _percent 
    End Sub 
End Structure 

SortMyWords函数的结尾,我只想返回Word列作为列表,我不确定我是否可以直接执行此操作 - 即 Return Listofwords(column Word)或是否需要将我的ListofWords复制到新列表中,只包含列字 - 类似于此(不包含工作)

Dim Newlist As New List(Of String) 
Newlist.AddRange(ListofWords(Words.Word)) 
Return NewList 

任何关于我是否应该完全不同(和更好)这样做的建议会非常感谢,因为我试图让自己的头部围绕对象,尽管我一直都在使用它们,但我对结构和列表对象很陌生。

感谢您的任何帮助,这让我疯狂了一个小时。

回答

2

我觉得你很接近。尝试:

ListOfWords 
    .OrderBy(Function(x) x.Percent) 
    .Select(Function(x) x.Word) 
    .ToList() 

如果你愿意,你也可以使用LINQ语法:

(from w in ListOfWords 
    orderby w.Percent ascending 
    select w.Word).ToList() 

注意,返回类型是List(Of String)而不是List(Of WordsToSort)了。因此,您不能像在示例代码中那样将其重新分配给变量ListOfWords

+0

我试图返回ListofWords,但我收到一个错误,说“类型'List(Of WordsToSort)'的值不能转换为'List(Of String)' - 它就好像列表中的字仍然是单维列表,我仍然可以从百分比列中获取变量,即 msgbox(ListofWords(1).Percent) 我不确定如何使用Linq,但我不介意因为我对SQL非常熟悉,它的非常类似于 –

+0

'List(Of String)'似乎是你的方法的正确返回类型,所以只需在上面的一个查询之前键入一个'Return'。Btw。'List(Of)'总是一维的。这只是一个简单的列表。有一个'List(Of T)',其中'T'是一个具有属性的类,并不是一个列表多维。 – Waescher

+0

你是一个明星 - 非常感谢你 - 我会upvote你的答案,但我还没有足够的积分,所以个人感谢你将不得不做 - 欢呼 –