Arrays 排序数组,其中每个项都是逗号分隔的值列表
在vb.net中,我有一个值数组,如下所示Arrays 排序数组,其中每个项都是逗号分隔的值列表,arrays,vb.net,sorting,Arrays,Vb.net,Sorting,在vb.net中,我有一个值数组,如下所示 arr(0) = "US,20,10,true" arr(1) = "Ind,22,8,true" arr(2) = "UK,40,6,true" arr(3) = "Chi,30,22,true" arr(4) = "Jpn,50,18,true" arr(5) = "Isr,18,15,true" arr(0) ="UK,40,6,true" arr(1) ="Ind,22,8,true" arr(2) ="US,20,10,true" arr(
arr(0) = "US,20,10,true"
arr(1) = "Ind,22,8,true"
arr(2) = "UK,40,6,true"
arr(3) = "Chi,30,22,true"
arr(4) = "Jpn,50,18,true"
arr(5) = "Isr,18,15,true"
arr(0) ="UK,40,6,true"
arr(1) ="Ind,22,8,true"
arr(2) ="US,20,10,true"
arr(3) ="Isr,18,15,true"
arr(4) ="Jpn,50,18,true"
arr(5) ="Chi,30,22,true"
我现在想要实现的是按照每个元素中第三个值的升序对这个数组进行排序(也就是说,根据值10、8、6、22、18和15对整个数组进行排序)。排序后,我应该得到如下所示的数组arr(0) = "US,20,10,true"
arr(1) = "Ind,22,8,true"
arr(2) = "UK,40,6,true"
arr(3) = "Chi,30,22,true"
arr(4) = "Jpn,50,18,true"
arr(5) = "Isr,18,15,true"
arr(0) ="UK,40,6,true"
arr(1) ="Ind,22,8,true"
arr(2) ="US,20,10,true"
arr(3) ="Isr,18,15,true"
arr(4) ="Jpn,50,18,true"
arr(5) ="Chi,30,22,true"
有人能给我提供密码吗
谢谢,
kdr输入:
Dim arr(5) As String
arr(0) = "US,20,10,true"
arr(1) = "Ind,22,8,true"
arr(2) = "UK,40,6,true"
arr(3) = "Chi,30,22,true"
arr(4) = "Jpn,50,18,true"
arr(5) = "Isr,18,15,true"
arr = arr.Cast(Of String).Select(Function(a) a.Split(","c)).
Select(Function(a) New With {Key .State = a(0),
Key .No1 = a(1),
Key .No2 = a(2),
Key .Bool = a(3)}).
OrderBy(Function(o) CInt(o.No2)).
Select(Function(s) String.Concat(s.State, ",", s.No1, ",", s.No2, ",", s.Bool)).ToArray()
For Each item In arr
Console.WriteLine(item)
Next
输出:
UK,40,6,true
Ind,22,8,true
US,20,10,true
Isr,18,15,true
Jpn,50,18,true
Chi,30,22,true
- 按逗号拆分输入数组元素
=>拆分(0,0)=“US”,拆分(0,1)=“20”。。。拆分(1,0)=“Ind”,拆分(1,1)=“22”,…
- 为拆分的每个元素创建匿名类型的IEnumerable
- 转换为整数并按匿名类型排序。No2(=数组中的第三个值)
- 将匿名类型的有序IEnumerable传输回数组
- 为什么不使用数据表
Dim Table1 As New DataTable
' Create four typed columns in the DataTable.
Table1.Columns.Add("Country", GetType(String))
Table1.Columns.Add("Num1", GetType(Integer))
Table1.Columns.Add("Num2", GetType(Integer))
Table1.Columns.Add("Bol", GetType(Boolean))
' Add some rows in the DataTable.
Table1.Rows.Add("IT", "123", "456", True)
Table1.Rows.Add("DE", "456", "789", False)
有人能给我提供代码吗?
没有。StackOverflow不是我们“提供”代码的网站。相反,到目前为止,你被困在哪里。我们很乐意为您提供帮助。请阅读此处:然后尝试一些代码,如果您仍然没有得到预期的结果,请发布代码。我确实编写了一个非linq版本,您的速度快了近5倍-很好。感谢您的反馈。我真的很关心linq的表现;)当然,我的代码也可以是裤子。我是一个相当基础的程序员:)如果你的代码可以工作,你也可以提供它作为答案。也许PO不想使用linq…你永远不知道。