C# 删除“&引用;数组列表中的元素
我有一个arraylist:C# 删除“&引用;数组列表中的元素,c#,C#,我有一个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.
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 filteredFtd = ftd.Cast<string[]>().Where(a => false == a[0].Equals(""));
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(""));
var filteredfdtd=ftd.Cast()。其中(a=>false==a[0]。等于(“”);
如果你不想改变ftd的位置
如果您确实想在适当的位置更改它,可以按照其他答案中的建议使用RemoveAll
顺便说一句:我将使用System.Collections.Generic中的a。类型安全性可以使您避免经常出现愚蠢的错误,还可以消除强制转换为神奇已知类型的要求(您必须记住正确的类型,否则会遇到运行时异常)。代码将类似于:
var filteredFtd = ftd.Cast<string[]>().Where(a => false == a[0].Equals(""));
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(""));
var ftd=new List();
添加(新字符串[]{“foo1.txt”,“01.01.2011”});
添加(新字符串[]{“foo2.txt”,“04.01.2011”});
添加(新字符串[]{“foo3.txt”,“09.01.2011”});
var filteredfdtd=ftd。其中(a=>false==a[0]。等于(“”);
尝试以下方法:
var filteredFtd = ftd.Cast<string[]>().Where(a => false == a[0].Equals(""));
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(""));
var filteredfdtd=ftd.Cast()。其中(a=>false==a[0]。等于(“”);
如果你不想改变ftd的位置
如果您确实想在适当的位置更改它,可以按照其他答案中的建议使用RemoveAll
顺便说一句:我将使用System.Collections.Generic中的a。类型安全性可以使您避免经常出现愚蠢的错误,还可以消除强制转换为神奇已知类型的要求(您必须记住正确的类型,否则会遇到运行时异常)。代码将类似于:
var filteredFtd = ftd.Cast<string[]>().Where(a => false == a[0].Equals(""));
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(""));
var ftd=new List();
添加(新字符串[]{“foo1.txt”,“01.01.2011”});
添加(新字符串[]{“foo2.txt”,“04.01.2011”});
添加(新字符串[]{“foo3.txt”,“09.01.2011”});
var filteredfdtd=ftd。其中(a=>false==a[0]。等于(“”);
如果您使用的是非LINQ方法,一个选项是循环使用该方法,并将所有其他元素复制到新列表中:
ArrayList ftd2 = new ArrayList();
foreach(object element in ftd)
{
string [] str = (string[])element;
if(str[0] != "")
ftd2.add(str);
}
差不多吧。未经测试的代码,但您应该了解这一点。如果您使用的是非LINQ方法,一个选项是循环使用它,并将所有其他元素复制到一个新列表中:
ArrayList ftd2 = new ArrayList();
foreach(object element in ftd)
{
string [] str = (string[])element;
if(str[0] != "")
ftd2.add(str);
}
差不多吧。未经测试的代码,但您应该明白。这两个示例都将从列表中删除项目,而不复制列表 我还喜欢使用
string.IsNullOrEmpty
进行检查。它使您的代码更加清晰,并检查是否存在可能的null
我的首选方法:如果您可以使用列表
,您可以使用:
var ftd = new List<string[]>();
// Logic to fill & handle
// To remove
ftd.RemoveAll(a => string.IsNullOrEmpty(a[0]));
var ftd=new List();
//填充和处理的逻辑
//除去
ftd.RemoveAll(a=>string.IsNullOrEmpty(a[0]);
你会更安全一些
如果您无法更改类型。您可以使用计数器而不是迭代器(foreach)在列表中循环:
for(int i=0;i
这两个示例都将从列表中删除项目,而不复制列表
我还喜欢使用string.IsNullOrEmpty
进行检查。它使您的代码更加清晰,并检查是否存在可能的null
我的首选方法:如果您可以使用列表
,您可以使用:
var ftd = new List<string[]>();
// Logic to fill & handle
// To remove
ftd.RemoveAll(a => string.IsNullOrEmpty(a[0]));
var ftd=new List();
//填充和处理的逻辑
//除去
ftd.RemoveAll(a=>string.IsNullOrEmpty(a[0]);
你会更安全一些
如果您无法更改类型。您可以使用计数器而不是迭代器(foreach)在列表中循环:
for(int i=0;i
尝试使用以下方法:
var result = ftd.Cast<string[]>().Where(x => x[0] != "");
var result=ftd.Cast()。其中(x=>x[0]!=”;
尝试使用以下方法:
var result = ftd.Cast<string[]>().Where(x => x[0] != "");
var result=ftd.Cast()。其中(x=>x[0]!=”;
您可以尝试使用LINQ修改列表:
var results = from string[] s in ftd
where s[0] != ""
select s;
ftd = new ArrayList(results.ToList());
您可以尝试使用LINQ修改列表:
var results = from string[] s in ftd
where s[0] != ""
select s;
ftd = new ArrayList(results.ToList());
我喜欢这样的东西
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]));
}
static void Main(字符串[]args)
{
ArrayList ftd=新的ArrayList();
添加(新字符串[]{“foo1.txt”,“01.01.2011”});
ftd.Add(新字符串[]{”,“04.01.2011”});
添加(新字符串[]{“foo3.txt”,“09.01.2011”});
var result=ftd.Cast()。其中(x=>!string.IsNullOrWhiteSpace(x[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]));
}
static void Main(字符串[]args)
{
ArrayList ftd=新的ArrayList();
添加(新字符串[]{“foo1.txt”,“01.01.2011”});
ftd.Add(新字符串[]{”,“04.01.2011”});
添加(新字符串[]{“foo3.txt”,“09.01.2011”});
var result=ftd.Cast()。其中(x=>!string.IsNullOrWhiteSpace(x[0]);
}
试试看
ArrayList ftd=新的ArrayList()
试试看
ArrayList ftd=新的ArrayList()
如果您在arraylist中使用每个数组的长度变量,您可以比较长度,如果数组的长度等于1,则可以删除该值。请注意,将日期存储为字符串始终是一种不好的做法。如果您在arraylist中使用每个数组的长度变量,则会很有帮助,你可以比较长度,如果数组的长度等于1,你可以删除它。请注意,将日期存储为字符串总是不好的做法。只是好奇,为什么要使用
false==expr
而不是!expr
?jb:读代码时很难漏掉!有些东西可能会在评论中漏掉,false==有些东西不太可能被忽略。只是好奇,你为什么用false==expr
而不是!expr
?jb:读代码时很难漏掉!某些内容可能会在评论中漏掉,false==某些内容不太可能被忽略。它不会从列表中删除元素,这会创建一个没有某些元素的列表副本。@GvS:Right-yo