LINQ之SequenceEqual

返回LINQ大全首頁

SequenceEqual()

SequenceEqual()用於判斷兩個序列中的內容是否一致。

public static bool SequenceEqual<TSource>( this IEnumerable<TSource> first, IEnumerable<TSource> second );
MSDN

下面示例用來比較數組和list中的內容是否一致。
要注意值類型和引用類型的使用區別。下面使用的是值類型。

代碼示例:

public static class Program
{
    static void Main( string[] args )
    {
        int[]       dataA   = new int[]     { 0, 1, 2, 3, 4, 5 };
        int[]       dataB   = new int[]     { 0, 1, 2, 4, 3, 5 };
        List<int>   dataC   = new List<int> { 0, 1, 2, 3, 4, 5 };

        bool resultAB = dataA.SequenceEqual( dataB );
        bool resultAC = dataA.SequenceEqual( dataC );
        bool resultBC = dataB.SequenceEqual( dataC );

        System.Console.WriteLine( "dataA:{0}", dataA.Text() );
        System.Console.WriteLine( "dataB:{0}", dataB.Text() );
        System.Console.WriteLine( "dataC:{0}", dataC.Text() );

        System.Console.WriteLine( "AB內容是否相同:{0}", resultAB );
        System.Console.WriteLine( "AC內容是否相同:{0}", resultAC );
        System.Console.WriteLine( "BC內容是否相同:{0}", resultBC );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
}
dataA:[0], [1], [2], [3], [4], [5],
dataB:[0], [1], [2], [4], [3], [5],
dataC:[0], [1], [2], [3], [4], [5],
AB內容是否相同:{0}:False
AC內容是否相同:{0}:True
BC內容是否相同:{0}:False

可以看出和我們預想中的效果一樣,內容相同則返回true。
接下來嘗試下引用類型。

代碼示例:

public static class Program
{
    private class Parameter
    {
        public int      ID      { get; set; }
        public string   Name    { get; set; }

        public override string ToString()
        {
            return string.Format( "ID:{0}, Name:{1}", ID, Name );
        }
    }

    static void Main( string[] args )
    {
        Parameter[] dataA = new Parameter[]
        {
            new Parameter() { ID = 0, Name = "正一郎" },
            new Parameter() { ID = 5, Name = "清次郎" },
        };
        Parameter[] dataB = new Parameter[]
        {
            new Parameter() { ID = 0, Name = "正一郎" },
            new Parameter() { ID = 5, Name = "清次郎" },
        };
        Parameter[] dataC = new Parameter[]
        {
            new Parameter() { ID = 4, Name = "徵史郎" },
        };

        bool resultAB = dataA.SequenceEqual( dataB );
        bool resultAC = dataA.SequenceEqual( dataC );
        bool resultBC = dataB.SequenceEqual( dataC );

        System.Console.WriteLine( "dataA:{0}", dataA.Text() );
        System.Console.WriteLine( "dataB:{0}", dataB.Text() );
        System.Console.WriteLine( "dataC:{0}", dataC.Text() );

        System.Console.WriteLine( "AB內容是否相同:{0}", resultAB );
        System.Console.WriteLine( "AC內容是否相同:{0}", resultAC );
        System.Console.WriteLine( "BC內容是否相同:{0}", resultBC );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
}
dataA:[ID:0, Name:正一郎], [ID:5, Name:清次郎],
dataB:[ID:0, Name:正一郎], [ID:5, Name:清次郎],
dataC:[ID:4, Name:徵史郎],
AB內容是否相同:{0}:False
AC內容是否相同:{0}:False
BC內容是否相同:{0}:False

可以發現內容一致但引用不同返回的是False。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章