You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Hashtable的部分字符串匹配查询问题

在C# Hashtable中实现键的部分字符串匹配查询

Hashtable本身没有内置的部分字符串匹配查询方法——它的快速查找依赖完整键的哈希值,ContainsKey()也只能检查完整键是否存在。但你可以通过以下两种方式实现你要的逻辑:

1. 遍历所有键进行匹配

直接遍历Hashtable的Keys集合,逐个检查键是否包含目标子串(比如你的tokennumber):

Hashtable myHashtable = new Hashtable();
// 先假设Hashtable已填充数据
string targetToken = "7463";

foreach (string key in myHashtable.Keys)
{
    if (key.Contains(targetToken))
    {
        // 找到匹配的键,执行你的逻辑
        var matchedValue = myHashtable[key];
        // do something
    }
}

注意:这种方法的缺点是需要遍历所有键,数据量大时性能会明显下降,因为完全没用到哈希表的快速查找特性。

2. 优化存储结构(推荐频繁查询场景)

如果经常需要按tokennumber查询,建议额外维护一个反向映射结构,避免每次都遍历:

// 主Hashtable存储完整键对应的数据
Hashtable mainTable = new Hashtable();
// 反向字典:用tokennumber映射到对应的完整键
Dictionary<string, string> tokenToFullKey = new Dictionary<string, string>();

// 添加数据时同步更新两个结构
string cardNum = "1234";
string tokenNum = "7463";
string fullKey = $"{cardNum},{tokenNum}";
mainTable.Add(fullKey, "你的数据");
tokenToFullKey.Add(tokenNum, fullKey);

// 查询时直接通过反向字典快速获取完整键
if (tokenToFullKey.TryGetValue("7463", out string matchedFullKey))
{
    if (mainTable.ContainsKey(matchedFullKey))
    {
        var value = mainTable[matchedFullKey];
        // do something
    }
}

这种方法查询性能和ContainsKey()一样快,只是插入数据时需要多维护一个字典,适合频繁按tokennumber查询的场景。

另外补充:如果你的项目基于.NET 2.0及以上版本,更推荐用泛型的Dictionary<string, TValue>替代非泛型的Hashtable,类型更安全,性能也更优,上面的逻辑同样适用。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:40:18