1

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

4 回答 4

4

遍历数组列表中的每个字符串,如果字符串不包含搜索词,则将其添加到新列表中,如下所示:

string searchString = "Hmmm_Joke.pdf";
ArrayList newList = new ArrayList();

foreach(string item in list)
{
    if(!item.ToLower().Contains(searchString.ToLower()))
    {
        newList.Add(item);
    }
}

现在您可以使用排除了搜索字符串值的任何匹配项的新列表。

注意:将字符串设为小写以进行比较以避免大小写问题。

于 2013-09-25T20:20:45.267 回答
1

为了从您的值中删除一个值,您ArrayList需要遍历这些值并检查每个值以查看它是否包含所需的值。跟踪该索引或索引(如果有很多)。

然后,在找到所有要删除的值后,您可以调用ArrayList.RemoveAt以删除所需的值。如果要删除多个值,请从最大的索引开始,然后处理较小的索引,否则,如果先删除最小的索引,则索引将关闭。

于 2013-09-25T20:26:05.617 回答
0

这将在不引发 InvalidOperationException 的情况下完成工作:

string searchString = "Hmmm_Joke.pdf";
foreach (string item in list.ToArray())
{
    if (item.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0)
    {
        list.Remove(item);
    }
}

我也让它不区分大小写。

祝你任务顺利。

于 2013-09-25T20:29:29.717 回答
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

于 2013-09-25T20:56:02.933 回答