c# 高级编程 10章224页 【集合】【集】

  • 包含不重复元素的集合
  • .NET Core包含两个集, 都实现了ISet<T>接口
    • HashSet<T>, 无序
      • 实现了ICollection中的Add()方法
      • 但是还提供了另一个Add()方法,如果元素已在集中,就不添加,并返回false
    • SortedSet<T>,有序
  • ISet<T>
    • 创建合集, UnionWith()
    • 判断两个集是否有交集, Overlaps()
    • 判断一个集是另一个集的超集或子集, IsSubsetOf(), IsSupersetOf()
    • ExceptWith()

示例

        static void Main()
        {
            var companyTeams = new HashSet<string>() { "Ferrari", "McLaren", "Mercedes" };
            var traditionalTeams = new HashSet<string>() { "Ferrari", "McLaren" };
            var privateTeams = new HashSet<string>() { "Red Bull", "Lotus", "Toro Rosso", "Force India", "Sauber" };

            if (privateTeams.Add("Williams"))
                Console.WriteLine("Williams added");
            if (!companyTeams.Add("McLaren"))
                Console.WriteLine("McLaren was already in this set");

            if (traditionalTeams.IsSubsetOf(companyTeams))

            {
                Console.WriteLine("traditionalTeams is subset of companyTeams");
            }

            if (companyTeams.IsSupersetOf(traditionalTeams))
            {
                Console.WriteLine("companyTeams is a superset of traditionalTeams");
            }


            traditionalTeams.Add("Williams");
            if (privateTeams.Overlaps(traditionalTeams))
            {
                Console.WriteLine("At least one team is the same with traditional and private teams");
            }

            var allTeams = new SortedSet<string>(companyTeams);
            allTeams.UnionWith(privateTeams);
            allTeams.UnionWith(traditionalTeams);

            Console.WriteLine();
            Console.WriteLine("all teams");
            foreach (var team in allTeams)
            {
                Console.WriteLine(team);
            }

            allTeams.ExceptWith(privateTeams);
            Console.WriteLine();
            Console.WriteLine("no private team left");
            foreach (var team in allTeams)
            {
                Console.WriteLine(team);
            }
        }
    }
复制代码

输出:

Williams added
McLaren was already in this set
traditionalTeams is subset of companyTeams
companyTeams is a superset of traditionalTeams
At least one team is the same with traditional and private teams

all teams
Ferrari
Force India
Lotus
McLaren
Mercedes
Red Bull
Sauber
Toro Rosso
Williams

no private team left
Ferrari
McLaren
Mercedes
复制代码

猜你喜欢

转载自juejin.im/post/7040971099969945614