我有一个包含许多变量的类,类似
class test
{
internal int x , y ;
internal string z;
}
我创建了此类list<test> c
我想做以下事情:
我需要快速而快速的方式,而不是迭代整个项目
请提出任何建议,
答案 0 :(得分:15)
LINQ to Objects是你的朋友。第一个:
bool allSameX = list.All(t => t.x == list[0].x);
Test firstTry = list.First(t => t.z == "try");
Test firstTryOrNull = list.FirstOrDefault(t => t.z == "try");
第一个取决于 当然至少有一个值。替代方案可能是:
bool allSameX = !list.Select(t => t.x)
.Distinct()
.Skip(1)
.Any();
换句话说,一旦你超越x
的第一个不同价值,就不应再有了。一个很好的方面是,一旦它发现第二个不同的值,它就会停止查看 - 当然第一行(All
版本)也是如此。
LINQ非常灵活,非常值得仔细研究。
编辑:如果您需要为多个不同的值执行后一个测试(“为z找到具有特定值的元素”),您可能需要字典或查找,例如
// If there are duplicate z values
var lookup = list.ToLookup(t => t.z);
// If z values are distinct
var dictionary = list.ToDictionary(t => t.z);
如果没有某些预处理工作,就无法执行所需的查询而无需至少迭代列表的某些。
答案 1 :(得分:2)
你可以使用linq。以下是一些小例子的链接,这些示例将为您的未来提供很多帮助http://msdn.microsoft.com/en-us/vcsharp/aa336746
答案 2 :(得分:0)
您可以实现自定义集合类而不是列表,并将搜索智能设置为例如 添加方法AllItemsHaveSameX()和私有bool字段allItemsHaveSameX 公开由搜索字符串键入的字典,以及具有该值的项目的索引。
添加/删除项目时: 您将重新评估allItemsHaveSameX 添加/删除私人词典。