为了账号安全,请及时绑定邮箱和手机立即绑定

创建一个将键作为列表(字符串)的字典

创建一个将键作为列表(字符串)的字典

C#
紫衣仙女 2022-08-20 16:50:21
需要创建一个字典,其中键是list(Of String)或字符串数组我发现这个链接C#列表作为字典键但我需要帮助来了解如何使用list(的字符串)来做到这一点Class test    Sub TryTest()        myDict.Add(New List(Of String) From {"Huey", "Dewey"}, actions.Sleeping)        myDict.Add(New List(Of String) From {"Dewey", "Louie"}, actions.Playing)        Dim newList As New List(Of String) From {"Dewey", "Louie"}        If myDict.ContainsKey(newList) Then            MsgBox("myDict contains the list of String, as Key Value")        Else            MsgBox("myDict don't contains the list of String, as Key Value")        End If    End Sub    Dim myDict As New Dictionary(Of List(Of String), actions)End ClassEnum actions    Sleeping    Eating    Studying    PlayingEnd Enum我期望包含键的字典输出。P.S. 由于 c# 接近 vb.net,并且网络上有很多 c#/vb.net 翻译人员可以轻松翻译,拜托,也非常感谢 c# 的帮助。
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞


using System.Collections;

using System.Collections.Generic;

你可以创建一个类,如


sealed class ListComparer : EqualityComparer<List<string>>

{

  public override bool Equals(List<string> x, List<string> y)

    => StructuralComparisons.StructuralEqualityComparer.Equals(x, y);


  public override int GetHashCode(List<string> x)

    => StructuralComparisons.StructuralEqualityComparer.GetHashCode(x);

}

然后将其用作Dictionary<,>


myDict = new Dictionary<List<string>, Actions>(new ListComparer());

该类也可以是泛型的。ListComparersealed class ListComparer<T> : EqualityComparer<List<T>>


编辑:


在评论之后,我意识到这不起作用(我曾经想过)!它适用于和诸如.所以上面的类需要改成:StructuralEqualityComparerList<string>string[]Tuple<string, string, ...>


sealed class ListComparer : EqualityComparer<List<string>>

{

  public override bool Equals(List<string> x, List<string> y)

    => StructuralComparisons.StructuralEqualityComparer.Equals(x?.ToArray(), y?.ToArray());


  public override int GetHashCode(List<string> x)

    => StructuralComparisons.StructuralEqualityComparer.GetHashCode(x?.ToArray());

}

我最初的尝试是错误的!


查看完整回答
反对 回复 2022-08-20
?
精慕HU

TA贡献1845条经验 获得超8个赞

问题是你比较2个对象。您需要比较其中的值。我不知道我的代码 vb.net 是c#(LINQ)。像这样做。


var myDic = new Dictionary<List<string>, Actions>();

myDic.Add(new List<string>() { "Huey", "Dewey" }, Actions.Sleeping);

myDic.Add(new List<string>() { "Dewey", "Louie" }, Actions.Playing);

var newList = new List<string>() { "Dewey", "Louie" };

if (myDic.Keys.Any(key =>

{

    if (key.Count != newList.Count) return false;


    var same = true;

    for (int i = 0; i < newList.Count; i++)

    {

        if (key[i] != newList[i]) same = false;

    }

    return same;

}))

    MsgBox("myDict contains the list of String, as Key Value");

else

    MsgBox("myDict don't contains the list of String, as Key Value")


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信