[c#筆記]所以為甚麼T[]有Length屬性HashSet<T>卻沒有
前言:
最近面試一直撞牆 打工又不能停
搞得身心俱疲((這不是不寫筆記藉口 草稿夾那4篇啥時要解決 (笑
但原地踏步是不行的 之前報名某C# backend培訓計畫 在HR面試被刷掉了QQ
想說那我就自學C#好了 然後就又開始刷題地獄...
想說那我就自學C#好了 然後就又開始刷題地獄...
正文:
近日在練習C# 的各種 container
某天在刷LeetCode 26. 的時候
我: 也太簡單了八www, 丟到set再走訪寫回原本的array就好了, 時間複雜度 O(n) 解決
開心按下run結果:
恩...身為C#小白, 第一個想的一定是這題怎麼那麼多倒讚 肯定沒有讀熟文件
於是打開HashSet文件一看 啊哈 肯定是這個屬性:
but!!
用不求甚解的態度學習 是很難成為大佬的
所以來觀察之間的關係
首先來看看HashSet文件:
public class HashSet<T> : ICollection<T>,
IEnumerable<T>, IEnumerable,
IReadOnlyCollection<T>, ISet<T>,
IReadOnlySet<T>, IDeserializationCallback,
ISerializable
其中ICollection<T>文件內我們可以在properties的表格看到有 Count 這個屬性
然後我看了看其他繼承的介面 都找沒有Length這個屬性...
所以有可能只有Array才有 那我們來看看Array implement 了那些介面八
在Array文件的屬性表格可以看到 Length 屬性出現了
往上滑一些可以注意到 :
public abstract class Array : ICollection,
IEnumerable, IList,
IStructuralComparable, IStructuralEquatable,
ICloneable
Array你小子也有繼承ICollection 所以照理來講 Array也可以用Count取得陣列長度
於是我們有下面的實驗:
int[] nums = {1, 2, 3, 4};
System.Collections.ICollection p = nums;
Console.WriteLine(nums.Length);
Console.WriteLine(p.Count);
輸出結果為:
> dotnet script test.cs
4
4
>
跟預期的一樣
結論:文件指引蒼生
Array抽象類別雖然不在System.Collection底下
但有實作ICollection, IList等介面 所以可以爽爽用 HashSet, Dictionary等類別的建構子
來建立想要用的container
跟用c++ STL 一樣爽爽的
留言
張貼留言