如何在此方案中检查键值对映射?

时间:2017-07-16 04:16:07

标签: c# .net linq c#-4.0 key-value

我想定义一个可以帮助我维护这个键值对列表的结构 -

"ABC", "010"
"ABC", "011",
"BAC", "010"
"BAC" , "011"
"CAB", "020"

然后我想写一个方法来传入(" ABC"," 010")并查看这个映射是否存在&如果是,则该方法返回true。

我应该使用什么结构以及该方法的外观如何?

我试过了 -

 public bool IsAllowed(string source, string dest)
        {
            bool allowed = false;
            var allowedDest = new List<KeyValuePair<string, string>>()
            {
                new KeyValuePair<string, string>("ABC","010"),
                new KeyValuePair<string, string>("ABC","011"),
                new KeyValuePair<string, string>("BAC","010"),                
                new KeyValuePair<string, string>("BAC","011"),
                new KeyValuePair<string, string>("CAB","020"),
                new KeyValuePair<string, string>("CAB","030")
            };

             // How to check for mapping?

            return allowed;
        }

3 个答案:

答案 0 :(得分:0)

如果它是一个很大的列表,我会声明

HashSet<Tuple<string,string>> Allowed = new HashSet<Tuple<string,string>>();

Allowed.Add(Tuple.Create<string,string>("ABC","010");
[... and all the others]

if (Allowed.Contains(Tuple.Create<string,string>("ABC","010")) { }

如果它是一个小列表,您可以使用foreach语句或.Any()命令迭代它。

答案 1 :(得分:0)

你可以保持简单,并使用一组字符串数组。

public bool IsAllowed(string source, string dest)
{
    var allowedDest = new []
    {
        new [] {"ABC", "010"},
        new [] {"ABC", "011"},
        new [] {"BAC", "010"}
        //...
    };

    var match = new [] { source, dest };

    return allowedDest.Any(x => x.SequenceEqual(match));
}

答案 2 :(得分:0)

您需要在这里使用Linq方法。

您可以使用FirstOrDefault方法通过比较列表中项目的键和值来从列表中检索具有匹配源和目标的项目。

如果发现项目将被返回,则将返回KeyValuePair的默认值。 然后你需要检查它是否返回默认值,并根据它返回true或false。

public bool IsAllowed(string source, string dest)
    {
        bool allowed = false;
        var allowedDest = new List<KeyValuePair<string, string>>()
        {
            new KeyValuePair<string, string>("ABC","010"),
            new KeyValuePair<string, string>("ABC","011"),
            new KeyValuePair<string, string>("BAC","010"),                
            new KeyValuePair<string, string>("BAC","011"),
            new KeyValuePair<string, string>("CAB","020"),
            new KeyValuePair<string, string>("CAB","030")
        };
        var item = allowedDest.FirstOrDefault(kvpair => kvpair.Key == source && kvpair.Value == dest);
        allowed = !item.Equals(default(KeyValuePair<string, string>));

        return allowed;
    }

这可以帮助您解决问题。