一个理解起来简单却不知道如何用代码实现的查找统计功能
一个理解起来简单却不知道怎么用代码实现的查找统计功能。
现在有这样一种情况:
有一个类型为String的数组 StrNum(),这个数组的长度可能是上百万。
假设他的每个数据格式是这样的,
值=号码1+空格+号码2+空格+号码3+空格+号码4+空格+号码5+空格+号码6,每一组里号码1到号码6都不会重复,比如下面的数值
StrNum(0)= 01 02 03 04 05 06
StrNum(1)= 01 02 03 04 05 06
StrNum(2)= 01 02 03 04 05 06
StrNum(3)= 01 02 03 04 05 06
怎么统计这个数组里某 N个号码 同时 出现的次数?
比如现在指定需要统计 3个号码 同时 出现的次数,那么就有
01 02 03=4次
01 02 04=4次
01 02 05=4次
01 02 06=4次
02 03 04=4次
……
统计 4个号码 同时 出现的次数,那么就有
01 02 03 04=4次
01 02 03 05=4次
……
这个该怎么算?可以实现吗?如何实现效率才比较高?
谢谢!
------解决方案--------------------
现在有这样一种情况:
有一个类型为String的数组 StrNum(),这个数组的长度可能是上百万。
假设他的每个数据格式是这样的,
值=号码1+空格+号码2+空格+号码3+空格+号码4+空格+号码5+空格+号码6,每一组里号码1到号码6都不会重复,比如下面的数值
StrNum(0)= 01 02 03 04 05 06
StrNum(1)= 01 02 03 04 05 06
StrNum(2)= 01 02 03 04 05 06
StrNum(3)= 01 02 03 04 05 06
怎么统计这个数组里某 N个号码 同时 出现的次数?
比如现在指定需要统计 3个号码 同时 出现的次数,那么就有
01 02 03=4次
01 02 04=4次
01 02 05=4次
01 02 06=4次
02 03 04=4次
……
统计 4个号码 同时 出现的次数,那么就有
01 02 03 04=4次
01 02 03 05=4次
……
这个该怎么算?可以实现吗?如何实现效率才比较高?
谢谢!
------解决方案--------------------
- VB.NET code
Dim sValue() as string=split(StrNum(),",") Dim iCtr as long dim sText as string="01 02 03" dim sTotal as long for i=0 to ubound(sValue) if instr(1,svalue(i),sText)>0 then stotal=stotal+1 end if next i debug.print stotal
------解决方案--------------------
试下这个
Private sFindString as string
Private Sub FindTest()
Dim stest(3) As String
stest(0) = "01 02 04 05 06"
stest(1) = "01 02 03 04 05 06"
stest(2) = "01 02 03 04 05 06"
stest(3) = "02 03 04 05 06"
sFindString = "01 03"
Dim sRes() As String = System.Array.FindAll(stest, AddressOf FindCondition)
Console.WriteLine(sRes.Length)
For Each sPrt As String In sRes
Console.WriteLine(sPrt)
Next
End Sub
Private Function FindCondition(ByVal s As String) As Boolean
Dim sCond() As String = sFindString.Split(" ")
For i As Integer = 0 To sCond.Length - 1
If InStr(s, sCond(i)) = 0 Then
Return False
End If
Next
Return True
End Function