检查ArrayList C#中的字符是否存在 - C#(2.0)

时间:2013-09-25 20:13:55

标签: c# arraylist

我想知道在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);

    }

希望这是有道理的。感谢。

4 个答案:

答案 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