我有这个arraylist:
ArrayList ftd = new ArrayList();
ftd.Add(new string[]{ "foo1.txt", "01.01.2011" });
ftd.Add(new string[]{ "foo2.txt", "04.01.2011" });
ftd.Add(new string[]{ "foo3.txt", "09.01.2011" });
并且在一些逻辑之后,arraylist看起来像这样:
[0] = { "foo1.txt", "01.01.2011" }
[1] = { "", "04.01.2011" }
[2] = { "foo3.txt", "09.01.2011" }
现在:我如何循环通过ftd并删除元素,首先var是“?”?
答案 0 :(得分:5)
尝试使用:
var result = ftd.Cast<string[]>().Where(x => x[0] != "");
答案 1 :(得分:4)
尝试类似:
var filteredFtd = ftd.Cast<string[]>().Where(a => false == a[0].Equals(""));
如果您不想在原地更改ftd。
如果您确实想要更改它,可以按照其他答案中的建议使用RemoveAll。
BTW :我会使用System.Collections.Generic中的List< T >来代替。类型安全可以经常使您免于愚蠢的错误,并且还消除了转换为神奇类型的要求(您必须记住正确的类型,否则您将遇到运行时异常)。代码类似于:
var ftd = new List<string[]>();
ftd.Add(new string[]{ "foo1.txt", "01.01.2011" });
ftd.Add(new string[]{ "foo2.txt", "04.01.2011" });
ftd.Add(new string[]{ "foo3.txt", "09.01.2011" });
var filteredFtd = ftd.Where(a => false == a[0].Equals(""));
答案 2 :(得分:2)
您可以尝试使用LINQ修改列表:
var results = from string[] s in ftd
where s[0] != ""
select s;
ftd = new ArrayList(results.ToList());
答案 3 :(得分:1)
这两个示例都会从列表中删除项目,而不会复制列表。
我也更喜欢使用string.IsNullOrEmpty
进行检查。它使您的代码更加清晰,并检查可能的null
。
我首选的方法:如果你可以使用List<string[]>
,你可以使用:
var ftd = new List<string[]>();
// Logic to fill & handle
// To remove
ftd.RemoveAll(a => string.IsNullOrEmpty(a[0]));
你会更安全。
如果无法更改类型。您可以使用计数器遍历列表,而不是使用迭代器(foreach):
for(int i = 0; i < ftd.Count; i++) {
if (string.IsNullOrEmpty(arr[0])) {
ftd.RemoveAt(i);
i--; // Adjust for One less
}
}
答案 4 :(得分:0)
如果您使用的是非LINQ方法,则可以选择循环并将所有其他元素复制到新列表中:
ArrayList ftd2 = new ArrayList();
foreach(object element in ftd)
{
string [] str = (string[])element;
if(str[0] != "")
ftd2.add(str);
}
这样的事情。未经测试的代码,但你应该明白这一点。
答案 5 :(得分:0)
我会选择像
这样的东西 static void Main(string[] args)
{
ArrayList ftd = new ArrayList();
ftd.Add(new string[] { "foo1.txt", "01.01.2011" });
ftd.Add(new string[] { "", "04.01.2011" });
ftd.Add(new string[] { "foo3.txt", "09.01.2011" });
var result = ftd.Cast<string[]>().Where(x => !string.IsNullOrWhiteSpace(x[0]));
}
答案 6 :(得分:-2)
试试吧
ArrayList ftd = new ArrayList();
ftd.Add(new string[] { "foo1.txt", "01.01.2011" });
ftd.Add(new string[] { "", "04.01.2011" });
ftd.Add(new string[] { "foo3.txt", "09.01.2011" });
ArrayList ftd1 = new ArrayList();
foreach (object str in ftd)
{
string[] arr =(string[]) str;
if (!arr[0].Split(',')[0].Equals(""))
{
ftd1.Add(str);
}
}