为特定成员迭代数组的有效方法

时间:2015-06-30 12:36:57

标签: c# arrays list

在我的上一个项目中,我发现自己遍历了许多数组或字符串列表,以便在其中找到特定的字符串。

我必须问一下,为了在数组中找到特定成员,有什么方法可以少于O(n)吗?

C#中的O(n)解决方案(考虑没有重复项):

foreach(string st in Arr)
{
   if (st=="Hello")
   {
      Console.WriteLine("Hey!");
      break;
   }
}

编辑:我没有问我的问题。我也希望改变我希望找到的成员,不仅要看他。 所以我的代码段改为:

foreach(string st in Arr)
{
   if (st=="Hello")
   {
      st="Changed";
      break;
   }
}

你能以某种方式到达O(logn)吗?如果是这样,你能否进一步解释它是如何完成的,它比我的解决方案更有效率。 谢谢你对此事的任何启发!

2 个答案:

答案 0 :(得分:8)

  

是否有任何方式小于O(n)才能找到特定成员   在一个数组里面?

如果您有一系列不重复的字符串,并且排序不是问题,那么您应该使用HashSet<T>,在正态分布的情况下,您应该在O(1)处<强>查找

var hashSet = new HashSet<string> { "A", "B", "C" };
if (hashSet.Contains("A"))
{ 
    Console.WriteLine("hey");
}

如果您需要的不仅仅是查找,例如访问特定索引的成员,那么HashSet<T>不应该是您的选择。如果你想要更详细的答案,你需要准确指定你将要对集合做什么。

答案 1 :(得分:1)

哥本哈根大学有一个名为"C5 Generic Collection Library"的项目。他们已经实现了一组扩展的集合类,可以帮助你,比如HashSet允许重复名为hashbag,并且他们有一个哈希索引的数组列表可能证明是有用的......