gpt4 book ai didi

c# - 如果键子串存在则返回字典值

转载 作者:行者123 更新时间:2023-11-30 13:44:55 24 4
gpt4 key购买 nike

如果键包含一个与字符串查找一半匹配的字符串,我想从字典中返回值。

private readonly Dictionary<string, string> _ipAddressesDictionary = new Dictionary<string, string>()
{
{"ip.qwer4.abc5.somename", "6x.x.00.xx"},
{"ip.qwer3.abc1.somename", "6x.3.xx.xx"},
}

例如,

我有一个字符串“abc1.somename”,我正在构建如下逻辑 - 目前不起作用 - 为我获取给定的键名包含该子字符串。我希望得到“6x.3.xx.xx”。

public string LookUpPeerIp(string deviceName)
{
var value = _ipAddressesDictionary.Keys.Contains(deviceName);

return value.ToString();
}

编辑:

抱歉,伙计们,忘记提及传入的字符串以进行查找也不完全匹配。它附加了一个 .co.uk :(

所以它将是 abc1.somename.co.uk 但字典有 ip.qwer3.abc1.somename 没有 .co.uk

最佳答案

在线尝试 https://dotnetfiddle.net/q6E1wR

这将切割正确的点 - 我的回答:

用法:

Console.WriteLine("--first");
Console.WriteLine(LookupByPrefix("abc1.somename.co.uk"));
Console.WriteLine("--many");
string[] many = LookupByPrefixMany("abc1.somename.co.uk");
foreach(string ip in many)
Console.WriteLine(ip);

对于单个结果:

public string LookupByPrefix(string domainName)
{
string[] dotDomains = domainName.Split('.');

for(int matchCount = dotDomains.Length; matchCount > 0; matchCount--)
{
string[] ret = LookUpPeerIpMany(string.Join(".", dotDomains.Take(matchCount)));
if(ret != null && ret.Length > 0) return ret.SingleOrDefault();
}

return null;
}

对于多个结果:

public string[] LookupByPrefixMany(string domainName)
{
string[] dotDomains = domainName.Split('.');

for(int matchCount = dotDomains.Length; matchCount > 0; matchCount--)
{
string[] ret = LookUpPeerIpMany(string.Join(".", dotDomains.Take(matchCount)));
if(ret != null && ret.Length > 0) return ret;
}

return null;
}

依赖:

public string[] LookUpPeerIpMany(string deviceName)
{
return _ipAddressesDictionary
.Where(q=>q.Key.Contains(deviceName)).Select(q=>q.Value).ToArray();
}

很高兴为您服务!

关于c# - 如果键子串存在则返回字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com