过滤数百万个字符串并只保留唯一的 Objective-C
Filter millions of strings and keep only unique ones Objective-C
我在 200 个 txt 文件中有大量字符串,我试图过滤并仅保留唯一的字符串。我想为此使用 NSSet,但问题是初始文件中有 3 亿个字符串,我无法将它们全部加载到 NSSet 中,因为它的初始化时间很长。
任何人都可以提出更好的方法或解决方法来帮助我解决这个问题吗?
也许你可以只保留那些独一无二的记忆。只要您解析文件,就可以将读取的每个字符串与唯一数组中的字符串进行比较,如果没有匹配项,则将其添加到数组中。但这也许不是一个很好的解决方案,因为如果您有很多独特的字符串,这可能会导致进行多次比较,而且这也可能需要一些时间。
但试一试,测量执行时间,看看这是否适合您的情况。
这是一个内存成本和 cpu 消耗量都较低的解决方案:
您可以使用 sqlite 数据库:创建一个 table,其中一列字符串作为唯一键,它将接收您正在解析的每个字符串。
在插入每个字符串时,如果字符串已经在 table 中,则不会插入,最后 table 将只包含唯一的字符串。
编写代码以便在插入失败时保持插入字符串,因为已经存在的字符串(重复键)
编辑:在此列上也添加一个索引,因为您的需要涉及很多条目
我在 200 个 txt 文件中有大量字符串,我试图过滤并仅保留唯一的字符串。我想为此使用 NSSet,但问题是初始文件中有 3 亿个字符串,我无法将它们全部加载到 NSSet 中,因为它的初始化时间很长。
任何人都可以提出更好的方法或解决方法来帮助我解决这个问题吗?
也许你可以只保留那些独一无二的记忆。只要您解析文件,就可以将读取的每个字符串与唯一数组中的字符串进行比较,如果没有匹配项,则将其添加到数组中。但这也许不是一个很好的解决方案,因为如果您有很多独特的字符串,这可能会导致进行多次比较,而且这也可能需要一些时间。
但试一试,测量执行时间,看看这是否适合您的情况。
这是一个内存成本和 cpu 消耗量都较低的解决方案:
您可以使用 sqlite 数据库:创建一个 table,其中一列字符串作为唯一键,它将接收您正在解析的每个字符串。
在插入每个字符串时,如果字符串已经在 table 中,则不会插入,最后 table 将只包含唯一的字符串。
编写代码以便在插入失败时保持插入字符串,因为已经存在的字符串(重复键)
编辑:在此列上也添加一个索引,因为您的需要涉及很多条目