我有一个文件路径的文本文件,需要这些文件路径的数组。但是,一些文件路径被“注释掉”,在行的开头有一个感叹号,我不想在数组中包含这些行。
目前,我使用loadStrings()
将整个文本文件放在一个数组中,然后迭代整个数组,只放置不以“!”开头的元素。在StringList
之前,在将StringList
转换回数组之前,从而获取仅包含“未注释”文件路径的数组,没有剩余空间。
这看起来非常低效和繁琐,所以有人知道更好的方法吗?有没有办法忽略以“!”开头的行在原始读取阶段,或者失败,一种方法从第一个数组中轻松删除这些元素,并相应地调整该数组的大小?
当前代码:
String file = "File_Paths.txt";
String[] filePaths_raw = loadStrings(file);
StringList filePaths = new StringList();
for (int i = 0; i < filePaths_raw.length; i++) {
if (filePaths_raw[i].charAt(0) != 33) {
filePaths.append(filePaths_raw[i]);
}
}
filePathsArray = new String[filePaths.size()];
for (int i = 0; i < filePathsArray.length; i++) {
filePathsArray[i] = filePaths.get(i);
}
答案 0 :(得分:1)
你的解决方案很好。
读取文件需要O(N)时间,其中N是文件中的行数。
迭代数组需要另外一次O(N)时间,你会做两次。所以你的总时间是3 * O(N),即O(N)。在单个循环中执行此操作仍然是O(N)时间。因此,在宏观的计划中,这并不是非常低效。
您可以使用declare @cadena varchar(max) = ''
select @cadena = @cadena + 'exec spAPI ' + ltrim(id) + ';'
from sysobjects;
exec(@cadena);
函数简化代码,该函数会从array()
创建一个数组。这不会加速你的代码(这可能不是你应该担心的事情),但它将消除最后StringList
循环。有关详细信息,请参阅the reference。