2016年1月6日 星期三

Immutable集合-ImmutableHashSet與ImmutableSortedSet

Tool:Visual Studio 2015 Enterprise
OS:Windows 10
.NET Framework 4.6

若想要有一個集合,可以儲存不重複的項目,又不常變動,並且要支援Thread Safe的功能,可以使用.NET Framework 4.5版新增的System.Collections.Immutable命名空間下的ImmutableHashSet類別。

這個集合真是太好用了。

 

以下是在Console程式使用範例,首先使用Nuget安裝套件

Install-Package System.Collections.Immutable

範例叫用六行Add方法新增6個項目到集合中,ImmutableHashSet會自動保留唯一項目,因此實際上放到集合中的項目只有3個:

using System;
using System.Collections.Immutable;
namespace ConsoleApplication2 {
  class Program {
    static void Main( string [ ] args ) {
      ImmutableHashSet<int> set = ImmutableHashSet<int>.Empty;
      set = set.Add( 100 );
      set = set.Add( 300 );
      set = set.Add( 200 );
      set = set.Add( 100 );
      set = set.Add( 300 );
      set = set.Add( 200 );

      Console.WriteLine( set.Count ); //3

      foreach ( var item in set ) {
        Console.WriteLine( item );
        set = set.Remove( item );
      }
      Console.WriteLine( set.Count ); //0
    }
  }
}

此範例執行結果:

image

若想要排序集合中的內容,可以改用ImmutableSortedSet:

using System;
using System.Collections.Immutable;
namespace ConsoleApplication2 {
  class Program {
    static void Main( string [ ] args ) {
      ImmutableSortedSet<int> set = ImmutableSortedSet<int>.Empty;
      set = set.Add( 100 );
      set = set.Add( 300 );
      set = set.Add( 200 );
      set = set.Add( 100 );
      set = set.Add( 300 );
      set = set.Add( 200 );

      Console.WriteLine( set.Count ); //3

      foreach ( var item in set ) {
        Console.WriteLine( item );
        set = set.Remove( item );
      }
      Console.WriteLine( set.Count ); //0
    }
  }
}

此範例執行結果:

image

不過要特別注意的是,大量的使用ImmutableHashSet與ImmutableSortedSet可能會讓程式的效能變差,要小心使用。

沒有留言:

總網頁瀏覽量