我有java代码从文本文件填充哈希映射.
HashMap<String, String[]> data = new HashMap<String, String[]>();
我用它来制作键值对.值是一个字符串数组.我必须迭代键值对的每个可能的组合(所以也必须迭代String [] - 数组).这适用于java,但现在我必须将其移植到delphi.有可能这样做吗?如何?谢谢!
我有一些'小'文本文件,包含大约500000个条目/行.每行还有一个"键"列.我需要在一个大文件中找到这个密钥(8GB,至少2.19亿条目).找到后,我需要将大文件中的'Value'附加到小文件中,在行的末尾作为新列.
像这样的大文件:
KEY VALUE
"WP_000000298.1" "abc"
"WP_000000304.1" "xyz"
"WP_000000307.1" "random"
"WP_000000307.1" "text"
"WP_000000308.1" "stuff"
"WP_000000400.1" "stuffy"
Run Code Online (Sandbox Code Playgroud)
简单地说,我需要在大文件中查找"密钥".
显然我需要在RAM中加载整个表(但这不是我有32GB可用的问题).大文件似乎已经排序了.我得检查一下.
问题是我无法使用类似TDictionary的快速查找,因为正如您所看到的,密钥并不是唯一的.
注意:这可能是一次性计算.我将使用该程序一次,然后扔掉它.因此,它不一定是最佳算法(难以实现).它只需要在适当的时间内完成(如1-2天).PS:我更喜欢没有DB这样做.
我正在考虑这个可能的解决方案:TList.BinarySearch.但似乎TList仅限于134,217,727(MaxInt div 16)项目.所以TList不会工作.
结论:
我选择了Arnaud Bouchez解决方案.他的TDynArray令人印象深刻!如果你需要处理大文件,我完全推荐它.
AlekseyKharlanov提供了另一个不错的解决方案,但TDynArray已经实现.
可能重复:
如何在通用TList中搜索具有特定字段值的记录?
我有一个集合
TList<TActivityCategory>
Run Code Online (Sandbox Code Playgroud)
TActivityCategory有一个String类型的Name属性,我想使用Name属性搜索TList.
我在TList <>中看到了BinarySearch,但这需要一个TActivityCategory实例.我只想传递一个名字的字符串.
我该怎么做呢?