我想知道在ArrayList中是否有一种方法我可以搜索以查看记录是否包含某些字符,如果是,那么抓住整个句子并放入一个字符串。例如:
list[0] = "C:\Test3\One_Title_Here.pdf";
list[1] = "D:\Two_Here.pdf";
list[2] = "C:\Test\Hmmm_Joke.pdf";
list[3] = "C:\Test2\Testing.pdf";
寻找:"Hmmm_Joke.pdf"
想获得:"C:\Test\Hmmm_Joke.pdf"
并将其放入Remove()
protected void RemoveOther(ArrayList list, string Field)
{
string removeStr;
-- Put code in here to search for part of a string which is Field --
-- Grab that string here and put it into a new variable --
list.Contains();
list.Remove(removeStr);
}
希望这是有道理的。感谢。
答案 0 :(得分:4)
遍历数组列表中的每个字符串,如果字符串不包含搜索词,则将其添加到新列表中,如下所示:
string searchString = "Hmmm_Joke.pdf";
ArrayList newList = new ArrayList();
foreach(string item in list)
{
if(!item.ToLower().Contains(searchString.ToLower()))
{
newList.Add(item);
}
}
现在,您可以使用已排除搜索字符串值匹配项的新列表。
注意:制作的字符串为小写字母以便进行比较,以避免出现套管问题。
答案 1 :(得分:1)
为了从ArrayList
中删除值,您需要遍历这些值并检查每个值以查看它是否包含所需的值。跟踪该索引,或索引是否有很多。
然后,在找到要删除的所有值后,可以调用ArrayList.RemoveAt
删除所需的值。如果要删除多个值,请从最大的索引开始,然后处理较小的索引,否则,如果删除最小的索引,索引将会关闭。
答案 2 :(得分:0)
这将在不引发InvalidOperationException的情况下完成工作:
string searchString = "Hmmm_Joke.pdf";
foreach (string item in list.ToArray())
{
if (item.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0)
{
list.Remove(item);
}
}
我也让它不区分大小写。
祝你好运。
答案 3 :(得分:0)
我宁愿使用LINQ来解决这个问题。由于IEnumerables是不可变的,我们首先应该得到我们想要删除的东西然后删除它。
var toDelete = Array.FindAll(list.ToArray(), s =>
s.ToString().IndexOf("Hmmm_Joke.pdf", StringComparison.OrdinalIgnoreCase) >= 0
).ToList();
toDelete.ForEach(item => list.Remove(item));
当然,使用硬编码的变量。
我还建议你阅读这个问题:Case insensitive 'Contains(string)' 它讨论了使用字符的正确方法,因为转换为大写/小写,因为它会花费很多性能,并且在处理文件名时可能会导致意外行为,如:文书.pdf