【问题标题】:Remove all elements from an ArrayList that contains string从包含字符串的 ArrayList 中删除所有元素
【发布时间】:2016-12-22 12:28:40
【问题描述】:

我一直在试图弄清楚如何删除我的 ArrayList 中值包含一些文本字符串的元素。

我的数组可能如下所示:

[0] "\"MAERSKA.CO\",N/A,N/A,N/A,N/A,N/A,N/A"
[1] "\"GEN.COABB.ST\",N/A,N/A,N/A,N/A,N/A,N/A"
[2] "\"ARCM.ST\",\"Arcam AB\",330.00,330.50,332.00,330.50,330.00"   

我的 ArrayList 是这样创建的:

string stringToRemove = "NA";   
ArrayList rows = new ArrayList(csvData.Replace("\r", "").Split('\n'));

所以问题是我如何删除所有包含“NA”的条目。 我已经尝试过使用多个 Contains 组合的 RemoveAt 或 RemoveAll,但我似乎无法正确获取代码。

如果可以避免的话,我不想制作一个新的数组。

问候 弗莱明

【问题讨论】:

  • 请写出过去和现在的样子。
  • string.Replace(data, "") 怎么样? rows = new ArrayList(csvData.Replace("\r", "").Split('\n').Select(st => st.Replace(st, "")));
  • Simser 和 Gabba 的解决方案同样完美。在提供 2 个解决方案时接受 Simser。

标签: c# arraylist


【解决方案1】:

如果您想在实例化变量之前减少 ArrayList,请考虑使用 LINQ:

ArrayList rows = new ArrayList(csvData.Replace("\r", "").Split('\n').Where(r => !r.Contains(stringToRemove)).ToList());

如果你想在实例化后减少你的 ArrayList,你可以试试这个:

for (int i = 0; i < rows.Count; i++)
{
    var row = (string)rows[i];
    if (row.Contains(stringToRemove))
    {
        rows.RemoveAt(i);
        i--;
    }
}

【讨论】:

    【解决方案2】:

    以下代码创建一个列表作为输出,其中包含除“N/A”之外的所有字符串:

    var outputs = new List<string>();
    foreach (var item in input)
    {
        var splitted = item.Split(',');
        foreach (var splt in splitted)
        {
            if (splt != "N/A")
            {
                outputs.Add(splt);
            }
        }
    }
    

    输入是你的数组。

    【讨论】:

    • 我认为问题是删除包含“N/A”的条目/行,而不是创建除“N/A”之外的所有单词的新列表。
    • 感谢您的贡献。我可以使用这个解决方案,但下面的答案更适合问题的解决方案。
    猜你喜欢
    • 2014-11-08
    • 2017-03-10
    • 1970-01-01
    • 2011-06-16
    • 2018-02-08
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多