【问题标题】:How can I remove quotation marks before a .Sort in VB.net如何在 VB.net 中删除 .Sort 之前的引号
【发布时间】:2016-03-21 17:28:01
【问题描述】:

我正在尝试按字母顺序对项目进行排序并将它们排序到一个新的文本框中。除了尝试对引号进行例外处理,因为它们出现在字母之前,我已经完成了所有操作。到目前为止我有

Dim holder as List(Of Strings) = New List(Of String)'holds my values Dim input as List(Of RichTextBox) = New List(Of RichTextBox)'where text is input

For i As Integer = 0 to input.Count - 1
   holder.Add(input.ElementAt(i))
Next
  holder.Sort()
For i As Integer = 0 to holder.Count - 1
   txtResult.Text = txtResult.Text + vbCrLf + holder(i)
Next

如何忽略可能输入的引号?我还需要将信息输出到已排序的文本框中,但要在已排序的字符串中加上引号。

【问题讨论】:

  • Holder = Holder.Select(Function(s) s.Replace("""", "")).ToList()
  • 我对编程很陌生,这是我的第一个独立项目,我该把那句话放在哪里?
  • 如果他们都有,他们不会干扰排序。否则如果你想remove quotation marks before a .Sort在排序之前添加它

标签: .net vb.net string sorting string-comparison


【解决方案1】:

只需实现您自己的 comparer 并使用采用自定义比较器的 List.Sort() 方法重载。

一个简短的例子:

Public NotInheritable Class MyComparer : Implements IComparer(Of String)

    Public Function Compare(ByVal a As String, ByVal b As String) As Integer _
    Implements IComparer(Of String).Compare

        a = a.Trim({"'"c, ControlChars.Quote})
        b = b.Trim({"'"c, ControlChars.Quote})

        Return New CaseInsensitiveComparer().Compare(a, b)

    End Function

End Class

用法:

Dim list As New List(Of String) From {"'b'", "''''a'", """d""", "c"}
list.Sort(New MyComparer)

【讨论】:

  • 就因为我是一个学习型的学生,你介意在这里解释一下这个过程吗?
  • IComparer 是一个“教” .NET 如何测试 2 个对象以查看它们如何相互比较的接口。比较对象是排序列表的关键部分,因此您可以使用自定义的ICompare 实现以几乎任何您能想到的方式对列表进行排序。基本上,他的比较器将两个字符串进行比较并暂时删除引号,然后将这些结果相互比较。这是一个使用 IComparer 的很棒的示例,但请记住,它在对非常大的列表进行排序时会出现一些严重的性能问题,因为它会不断创建新的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多