我需要处理一个由数字组成的列表(或数组或DataTable字段),在这些数字中,有时有"bis“、"ter”、"quater“等等。
清单看上去如下:
1 2 3. 3之二 4. 5 5之二 5之三 5之四 6 ..。
我的想法(为了保持秩序)是以这种方式使用小数来存储数据:
5之二= 5.2 5之三= 5.3 5之四= 5.4
转换为字符串,然后在提取数据时使用replace。
我的问题是:
-这是个好方法吗?
-有更好的解决方案吗?
发布于 2016-12-02 17:03:47
当你到达decies (即5.10)时,你的方法就会崩溃。创建一个新的结构化类型可能更好。例如
Public Structure OrderedNumber
Public Value As Integer
Public Order As Integer
End Structure这样你就可以做如下的事情:
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),例如,您希望将每个项与某种类型的数据对象链接起来。
发布于 2016-12-02 17:03:30
你说由数字组成,但看上去像字符串。因此,您可以解析字符串,假设格式总是带有可能的空格和后缀的整数。
可以使用LINQ查询字符串。dataDecimals保存你得到的小数。
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
https://stackoverflow.com/questions/40937015
复制相似问题