如何在vb.net中创建字符串查找

如何在vb.net中创建字符串查找,vb.net,Vb.net,我有一组数据,可能最好保存在表/矩阵中。这是一个游戏中的比赛统计数据的集合,其中有两个5人的球队,有超过100个角色可供选择。一个匹配中不能拾取两次角色。我要做的是,计算一整批匹配中每个角色杀死另一个角色的次数之和。我想象的是一个表,表的标题和第一列上都有所有字符。每个单元格中的值表示该行的字符杀死该列的字符的频率 我的问题是我有这样的数据 Tom 1 Sarah 4 Juliet 3 Joe Dick 3 Sarah 2 Juliet - Joe Harry 1 Sarah

我有一组数据,可能最好保存在表/矩阵中。这是一个游戏中的比赛统计数据的集合,其中有两个5人的球队,有超过100个角色可供选择。一个匹配中不能拾取两次角色。我要做的是,计算一整批匹配中每个角色杀死另一个角色的次数之和。我想象的是一个表,表的标题和第一列上都有所有字符。每个单元格中的值表示该行的字符杀死该列的字符的频率

我的问题是我有这样的数据

Tom    1 Sarah  4 Juliet  3 Joe
Dick   3 Sarah  2 Juliet  - Joe
Harry  1 Sarah  2 Juliet  5 Joe

Sarah  3 Tom    - Dick    1 Harry
Juliet 1 Tom    2 Dick    3 Harry
Joe    - Tom    4 Dick    - Harry
dim kills(100,100) as integer
(1,23) +=1
(1,34) +=4
etc.
第一行意思是汤姆杀了莎拉一次,朱丽叶四次,乔三次

我的问题是有超过100个角色的名字汤姆,朱丽叶等。那么我如何存储多少次汤姆杀死了莎拉,而没有一个选择案例语句,每个角色有100个案例?理想情况下,我只想给每个字符一个数字,然后有一个正方形数组,并像这样存储数字

Tom    1 Sarah  4 Juliet  3 Joe
Dick   3 Sarah  2 Juliet  - Joe
Harry  1 Sarah  2 Juliet  5 Joe

Sarah  3 Tom    - Dick    1 Harry
Juliet 1 Tom    2 Dick    3 Harry
Joe    - Tom    4 Dick    - Harry
dim kills(100,100) as integer
(1,23) +=1
(1,34) +=4
etc.

在上面的1中,23可能是汤姆杀了莎拉,因为汤姆的ID可能是1,莎拉可能是23。

我不是Linq专家,但像这样的事情怎么样:

Sub Main()
    Dim Kills As New Dictionary(Of String, Dictionary(Of String, Integer))
    Dim Names As String = "Tom,Dick,Harry,John,Sarah,Jill"
    Dim NameArray = Names.Split(",")
    ' Create a dictionary of dictionaries to hold the kills
    For Each killer As String In NameArray
        Dim newKill As New Dictionary(Of String, Integer)
        For Each victim As String In NameArray
            newKill.Add(victim, 0)
        Next
        Kills.Add(killer, newKill)
    Next

    ' Tom Kills Sarah
    Kills("Tom")("Sarah") += 1
    Kills("Tom")("Sarah") += 1
    ' Tom kills Jill
    Kills("Tom")("Jill") += 1
    Kills("Dick")("Tom") += 1
    Kills("Dick")("Sarah") += 1
    ' Get some numbers out
    Dim SarahDies = Kills.Sum(Function(k) k.Value("Sarah"))
    Dim JillDies = Kills.Sum(Function(k) k.Value("Jill"))
    Dim DickDies = Kills.Sum(Function(k) k.Value("Dick"))
    Dim TomKillsSarah = Kills("Tom")("Sarah")
End Sub

这是另一个值得考虑的解决方案。使用自定义类表示killer/Victor的元组,并将其用作字典中的键

然后像这样使用它

Dim Names As String = "Tom,Dick,Harry,John,Sarah,Jill"
Dim NameArray = Names.Split(",")

Dim KillSum As New Dictionary(Of KillInfo, Integer)

For Each killer As String In NameArray
    For Each victim As String In NameArray
        KillSum.Add(New KillInfo(killer, victim), 0)
    Next
Next

KillSum(New KillInfo("Tom", "Dick")) += 10
KillSum(New KillInfo("Tom", "Dick")) += 23
KillSum(New KillInfo("Harry", "Jill")) += 56
KillSum(New KillInfo("Jill", "Harry")) += 25

For Each info In KillSum
    Console.WriteLine($"{info.Key.Killer} killed {info.Key.Victim} {info.Value} times.")
Next

注意:我不知道TupleOf K,V是否会以一种可用于字典的方式自行实现GetHashCode和Equals,这就是我编写KillInfo类的原因。如果Tuple确实是这样工作的,那么您可以跳过我的课程,直接进入使用部分。

如果愿意的话,最好将此类信息保存在数据库中,并将kill记录为事务。您可以将所有人存储在一个表中,然后记录他们每次在另一个表中杀死其他人的情况。