首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理包含“之二”、“之三”、“四”等内容的数字列表

如何处理包含“之二”、“之三”、“四”等内容的数字列表
EN

Stack Overflow用户
提问于 2016-12-02 16:39:57
回答 2查看 289关注 0票数 0

我需要处理一个由数字组成的列表(或数组或DataTable字段),在这些数字中,有时有"bis“、"ter”、"quater“等等。

清单看上去如下:

1 2 3. 3之二 4. 5 5之二 5之三 5之四 6 ..。

我的想法(为了保持秩序)是以这种方式使用小数来存储数据:

5之二= 5.2 5之三= 5.3 5之四= 5.4

转换为字符串,然后在提取数据时使用replace

我的问题是:

-这是个好方法吗?

-有更好的解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 17:03:47

当你到达decies (即5.10)时,你的方法就会崩溃。创建一个新的结构化类型可能更好。例如

代码语言:javascript
复制
Public Structure OrderedNumber
    Public Value As Integer
    Public Order As Integer
End Structure

这样你就可以做如下的事情:

代码语言:javascript
复制
Module Module1
    Public Structure OrderedNumber
        Implements IComparable(Of OrderedNumber)
        Public Value As Integer
        Public Order As Integer
        Public Function CompareTo(ByVal other As OrderedNumber) As Integer _
            Implements IComparable(Of OrderedNumber).CompareTo
            If Value = other.Value Then
                Return Order - other.Order
            Else
                Return Value - other.Value
            End If
        End Function
    End Structure

    Sub Main()    
        Dim OList As New List(Of OrderedNumber)
        Dim n As OrderedNumber    
        ' 5 ter - adding out of order!
        n.Value = 5
        n.Order = 2
        OList.Add(n)
        ' 5            
        n.Order = 0
        OList.Add(n)
        ' 5 bis
        n.Order = 1
        OList.Add(n)

        OList.Sort()

        For Each n In OList
            Console.WriteLine(n.Value & ":" & n.Order)
        Next
        Console.ReadLine()    
    End Sub    
End Module

其中产出:

5:0 5:1 5:2

您也可以使用Dictionary(Of OrderedNumber, MyObject),例如,您希望将每个项与某种类型的数据对象链接起来。

票数 3
EN

Stack Overflow用户

发布于 2016-12-02 17:03:30

你说由数字组成,但看上去像字符串。因此,您可以解析字符串,假设格式总是带有可能的空格和后缀的整数。

可以使用LINQ查询字符串。dataDecimals保存你得到的小数。

代码语言:javascript
复制
Sub Main()
    Dim dataStrings =
        {"1",
         "2",
         "3",
         "3 bis",
         "4",
         "5",
         "5 bis",
         "5 ter",
         "5 quater",
         "6"}
    For Each ds In dataStrings
        Console.WriteLine(ds)
    Next
    Dim dataDecimals =
        dataStrings.Select(
            Function(d)
                Dim s = d.Split(" "c)
                Dim r = Decimal.Parse(s(0))
                If s.Length = 2 Then
                    Select Case s(1)
                        Case "bis"
                            r += 0.2
                        Case "ter"
                            r += 0.3
                        Case "quater"
                            r += 0.4
                    End Select
                End If
                Return r
            End Function)
    For Each dd In dataDecimals
        Console.WriteLine(dd)
    Next
    Console.ReadLine()
End Sub

控制台输出

1233 bis455 bis5 ter5 quater61233.2455.25.35.46

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40937015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档