【问题标题】:Fast way to find key-value pair in C#在 C# 中查找键值对的快速方法
【发布时间】:2021-02-16 22:58:47
【问题描述】:

听起来很琐碎,但我真的很绝望:

如何以优雅的快速方式导入值并将其与给定键匹配?

仅电话区号 - 查找给定区域的匹配前缀(无多用户)。我有它作为 CSV 但 SQLite 也可以。 SQLite 连接器?还是字典?我不知道...

提前谢谢你!

尼哥

【问题讨论】:

  • 这取决于...将其保留在 CSV 文件中,每次启动程序时,您都需要将 CSV 加载并解析为您可以使用的某种数据结构。如果这不是问题,那没关系,否则数据库会更好。还有它需要多快? 1毫秒? 10毫秒? 100 毫秒?你的数据集有多大?你试过什么了?现在需要多少时间?
  • 二进制搜索列表或树,或者可能是基数树。不要自己编程,找一个已经有的库
  • 谢谢 Tomek 和 Charlieface!对不起,我忘了提。只有5200个条目,但最终是低端目标机器。在我旧的第二代移动 i7 识别上,这种方式立即发生,所以我完全不用担心了。由于字符限制,我将我的 sn-p 发布在单独的评论中。

标签: c# arrays sqlite csv arraylist


【解决方案1】:

就这么简单。这是一个控制台应用程序。 全局创建和初始化并不好,但我没有设法通过仅使用公共类(输入“字典”并返回它)来跨多个源文件完成它。

主 .cs 文件:

static class GlobalVar
{ 
    public static Dictionary<string, string> areaCodesDict = new Dictionary<string, string>();
}

第二个.cs文件:

public class AreaCodes
{
    public static void ParseCsv()
    {
        var path = ConfigurationManager.AppSettings["areaCodesCsv"];

        using (var strReader = new StreamReader(path))
        {
            while (!strReader.EndOfStream)
            {
                var line = strReader.ReadLine();
                if (line == null) { continue; }

                var csv = line.Split(Convert.ToChar(ConfigurationManager.AppSettings["areaCodesCsvDelim"]));

                // areaCodesDict.Add(key, value)
                GlobalVar.areaCodesDict.Add(csv[0], csv[1]);
            }

        }
    }
}

再次在 Main.cs 文件中使用示例:

        if (regexMatch.Success)
        {
            foreach (KeyValuePair<string, string> pair in GlobalVar.areaCodesDict)
            { 
                if(destNumber.StartsWith(pair.Value))
                {
                    destNumber = destNumber.Replace(pair.Value, pair.Key);
                }
            }
        }

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多