我遇到以下问题。我有一个集合:
Collection<Vehicle> list = new Collection<Vehicle>();
code = 1,2,3, Description = "aaa"
code = 10,438,13, Description = "bbb"
code = 81,8623,362, Description = "ccc"
code = 163,4312,53, Description = "ddd"
...
但我只关心他们中的一些..我关心的清单就在这里,即codesCareAbout =“1 | 2 | 3 | 163 | 4312 | 53”
我需要遍历该集合并删除我不关心的车辆,或者选择另一个包含我关注的车辆的列表?
有什么建议吗?
非常感谢, 詹姆斯
答案 0 :(得分:4)
您可以向后迭代列表,并使用RemoveAt
使用for
索引从列表中删除:
for (int i = list.Count - 1; i >= 0; i--)
{
Foo item = list[i];
if (IsFoobar(item))
list.RemoveAt(i);
}
需要向后计数,这样你就不会随意改变你的索引计数,因为你不能改变使用枚举器枚举的列表,所以需要使用for循环。
或者,按照您的建议,按照您的要求填写空列表 - 但是,使用取决于您是否需要修改您给出的列表或者可以创建新列表。
答案 1 :(得分:0)
假设Vehicule有Code(string)属性和Description属性(问题不清楚!)。
1 /克隆列表:var clone = list.ToList();
2 /迭代并决定当前项目是否有趣:
foreach(var item in clone)
{
if (! IsInteresting(item))
list.Remove(item);
}
3 / IsInteresting可以是,例如:
foreach(var code in item.Code.Split(','))
{
if (codesCareAbout.Split('|').Contains(code))
return true;
}
答案 2 :(得分:0)
使用linq过滤列表会产生最干净的代码:
var interestinglist = list.Where(v=> v.IsInteresting(v));
IsInteresting可以实现为
codesIcareAbout.Intersect(v.Codes).Any();
这假设两个字段都是集合而不是字符串,但可以通过调用string.Split()轻松修复。