在C#中显示2组的联合

时间:2016-11-10 04:15:39

标签: c# union

我在C#中有一个代码,我向用户询问他想要创建的集合数量,然后在这些集合中输入元素。从这些集合中,他选择2组并显示所选集合的并集。

在下面的代码中,集合中的元素未添加到_items,并且不显示Union。

感谢您的帮助。

namespace Union
{

  class Program
  {
    static List<SortedSet<string>> _items = new List<SortedSet<string>>();
    static SortedSet<string> set = new SortedSet<string>();

    static void Main(string[] args)
    {
        int i, j, a, b;
        string k;
        Console.WriteLine("\n Enter the number of set to be used: ");
        i = Convert.ToInt32(Console.ReadLine());
        for ( j = 1; j <= i; j++)
        {
            SortedSet<string> set = new SortedSet<string>();
            do
            {
                Console.WriteLine("Enter first element in set {0}:", j);
                k = Console.ReadLine();
                if (k != "stop")
                    set.Add(k);
            } while (k != "stop");
            _items.Add(set);
        }
        Console.WriteLine("Enter index of 1st set  of union:{0}");
        b = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Enter index of 2nd set  of union:{0}");
        c = Convert.ToInt32(Console.ReadLine());
        DisplayUnion(a, b);
    }

    public static void DisplayUnion(int a, int b)
    {
        SortedSet<string> set1 = _items[a];
        SortedSet<string> set2 = _items[b];
        set1.UnionWith(set2);
        Console.WriteLine(set1);
    }
  }
}

1 个答案:

答案 0 :(得分:1)

通过修改Main()DisplayUnion(int a, int b)方法来完全编辑我的答案,以实现更好的代表性并包括边境案例场景。 Main()方法:

static void Main(string[] args)
{
    int i, j, a, b;
    string k;
    Console.WriteLine("Enter the number of sets to be used: ");
    i = Convert.ToInt32(Console.ReadLine());
    for (j = 1; j <= i; j++)
    {
        SortedSet<string> set = new SortedSet<string>();
        var index = 0;
        do
        {
            index++;
            Console.WriteLine($"Enter {index} element in set {j}:");
            k = Console.ReadLine();
            if (k != "stop")
                set.Add(k);
        } while (k != "stop");
        _items.Add(set);
    }

    if (_items.Count == 0)
    {
        Console.WriteLine("You have no sets to union.");
        return;
    }

    if (_items.Count == 1)
    {
        Console.WriteLine("Union of only set is: " + string.Join("", _items[0]));

        return;
    }

    while (true)
    {
        Console.WriteLine("Enter index of 1st set  of union:{0}");
        a = Convert.ToInt32(Console.ReadLine());
        if (a < _items.Count)
        {
            break;
        }

        Console.WriteLine($"Set {a} does not exists.");
    }

    while (true)
    {
        Console.WriteLine("Enter index of 2nd set  of union:{0}");
        b = Convert.ToInt32(Console.ReadLine());
        if (b < _items.Count)
        {
            break;
        }

        Console.WriteLine($"Set {b} does not exists.");
    }

}

DisplayUnion(int a, int b)方法:

public static void DisplayUnion(int a, int b)
{

    SortedSet<string> set1 = _items[a];
    SortedSet<string> set2 = _items[b];
    set1.UnionWith(set2);
    Console.WriteLine($"Union of set {a + 1} with set {b + 1} is: " + string.Join("", set1));
}

你收到outOfRangeException是因为你输入了一个集合的无效索引而没有检查它实际上是无效的。我通过添加两个while cycles来解决这个问题。 另外,当集合为0或1时,我为边界情况添加了两个if statements

希望它有所帮助。