课程列表问题c#

时间:2011-07-26 22:13:28

标签: c# .net list generics

我有一个包含许多变量的类,类似

class test
{    
  internal int x , y ;
  internal string z;
}

我创建了此类list<test> c

的列表

我想做以下事情:

  1. 测试所有列表项是否包含相同的x
  2. 获取列表中包含z =“try”
  3. 的项目

    我需要快速而快速的方式,而不是迭代整个项目

    请提出任何建议,

3 个答案:

答案 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 添加/删除私人词典。