2017-07-17 94 views
-2

有什麼方法的複雜性,以列表不存在,我有這樣的:Exists C#的複雜性是什麼?

List<ComplexData> list = new List<ComplexData>() 
list.Exists(r => r.Name == someValue); 

我的學生都值:

public class ComplexData 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Descripcion { get; set; } 
} 

我一直在尋找的複雜性,我已經試過執行一些循環,但時間不會改變太多。我不知道列表是否會像數據庫一樣創建一個「索引」,或者如果比較器進行一些排序,然後執行binarySearch。

+3

它'爲O(n)'更多詳情[這裏](https://msdn.microsoft.com/en-us/library/bfed8bca(V = vs.110 ).aspx) – gudthing

+0

正如其他人所說,它是O(n)。如果你想要更快的查找,可以考慮使用一個'Dictionary ',這個''Name'屬性是鍵入的。編輯:但是這會假設'名稱'是唯一的。 –

回答

0

的源代碼是開放的,你可以找到它here

的方法基本上經過在集合中的每個元素,直到它找到一個匹配。

public bool Exists(Predicate<T> match) 
{ 
    return FindIndex(match) != -1; 
} 

public int FindIndex(Predicate<T> match) 
{ 
    Contract.Ensures(Contract.Result<int>() >= -1); 
    Contract.Ensures(Contract.Result<int>() < Count); 
    return FindIndex(0, _size, match); 
} 

public int FindIndex(int startIndex, int count, Predicate<T> match) 
{ 
    if ((uint) startIndex > (uint) _size) 
    { 
     ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, 
      ExceptionResource.ArgumentOutOfRange_Index); 
    } 

    if (count < 0 || startIndex > _size - count) 
    { 
     ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, 
      ExceptionResource.ArgumentOutOfRange_Count); 
    } 

    if (match == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 
    } 
    Contract.Ensures(Contract.Result<int>() >= -1); 
    Contract.Ensures(Contract.Result<int>() < startIndex + count); 
    Contract.EndContractBlock(); 

    int endIndex = startIndex + count; 
    for (int i = startIndex; i < endIndex; i++) 
    { 
     if (match(_items[i])) return i; 
    } 
    return -1; 
} 
0

據微軟的網站上的C#文檔:

備註

謂語是一個委託到返回true的方法,如果傳遞給它的對象匹配在委託規定的條件。當前列表中的元素將單獨傳遞給Predicate委託,並在找到匹配項時停止處理。

該方法執行線性搜索;因此,此方法是O(n)操作,其中n是Count。

見這裏:List.Exists

0

複雜度是O(n)。

Exists內部使用FindIndex。 沒有創建索引,基本上Exists將循環集合中的所有項目,直到找到與謂詞相匹配的項目爲止。

嘗試一千萬個元素,您會看到它與具有相同元素數的​​相比得到的速度有多慢。

​​具有O(1)複雜

相關問題