我需要检查特定字符串是否包含在其他集合中:
private bool Contains(string field)
{
return this.Fields.Contains(field); // HashSet<string> local property
}
如果容器只有一项任务 - 容纳多个字符串并检查另一个字符串是否插入,最好使用哪种类型的容器?
最佳答案
HashSet 有用吗?当然。但这不是你问的问题。您要求进行最快查找。
这是最快的吗?不,当然不是,无论如何都不是。
首先,为了谈论“最快”,我们需要准确描述“最快”的含义。你是说:
?请准确说明“尽可能快”的含义。我们可以为您设计一个理论上最快的算法,前提是我们确切地知道最快对您意味着什么。
例如,假设您正在编写一个编译器。在编译器中我们必须一直做的事情是检查特定字符串是否在字符串列表中。也许我们正在检查一个字符串是否是关键字,所以我们必须查找给定的字符串是否在集合 {"int", "double", "for", "foreach", "class"... }
我们可以将它们放在哈希集中并获得不错的性能。但如果我们想要尽可能最好的性能,我们可以做得更好。例如,我们可以对现有的数十亿行源代码进行分析,找出哪些关键字最常见,哪些关键字最不常见,然后编写一个自定义哈希表,针对 (1) 快速拒绝那些不常见的内容进行优化根本不是关键字,并且 (2) 以识别其他关键字为代价快速识别最常见的关键字。
注意这需要静态分析;尽管它在典型情况下表现良好,但在使用大量稀有关键字的罕见情况下表现不佳。我们可以采用的另一种方法是编写一个自调整哈希表,当特定字符串被频繁搜索时,该哈希表动态识别。
例如,假设您正在编写 JScript 运行时的实现。我们经常必须在一组字符串中寻找一个字符串:
for(i = 0; i < 10; ++i) { foo.bar(i); }
这里我们必须在由“foo”标识的对象中查找字符串“bar”十次。 “foo”中实现该查找的哈希表在循环中第一次注意到“bar”已被使用,因此它会动态调整哈希表结构,以便在第二次循环中,查找速度更快。这是我们在 JScript 实现中采用的策略。
现在,这优化了循环的情况,但它使这种情况可能比它可能的要慢:
for(i = 0; i < 10; ++i) { foo.bar(i); foo.blah(i); foo.abc(i); }
因为我们没有做更多的分析并意识到“嘿,我们刚刚将这个哈希表重新优化了三次,现在我们要重新做一遍,也许我们应该保持原样。”
对我们来说幸运的是,我们没有像您一样寻找尽可能快 的查找。我们只是在寻找一个相当快的查找。
您能否仔细、完整地描述您的使用案例究竟是为了尽可能快的查找?您可以使用许多算法来加快查找速度,但它们会变得非常复杂。
关于c# - HashSet<T> 是查找速度最快的容器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258999/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我在一个我想在formtasticGem中覆盖的方法中找到了这个。该方法如下所示:defto_htmlinput_wrappingdohidden_field_html是什么意思?在第三行做什么?我知道它对数组有什么作用,但在这里我不知道。 最佳答案 你可以这样读:hidden_field_htmllabel_with_nested_checkbox是连接到hidden_field_html末尾的参数-为了“清晰”,他们将其分成两行 关于ruby-on-rails-没有参数的`
我已经看到了一些其他的问题,尝试了他们的建议,但没有一个对我有用。我已经使用Rails大约一年了,刚刚开始一个新的Rails项目,突然遇到了问题。我卸载并尝试重新安装所有Ruby和Rails。Ruby很好,但Rails不行。当我输入railss时,我得到了can'tfindgemrailties。我当前的Ruby版本是ruby2.2.2p95(2015-04-13修订版50295)[x86_64-darwin15],尽管我一直在尝试通过rbenv设置ruby2.3.0。如果我尝试rails-v查看我正在运行的版本,我会得到同样的错误。我使用的是MacOSXElCapitan版本10