如何比较两个没有订单的清单

时间:2012-06-19 05:20:54

标签: list c#-4.0

我有两个清单。

前:

    List<string> expected = new List<string>();

    expected.Add( "a" );
    expected.Add( "b" );
    expected.Add( "c" );


    actual = new List<string>();
    actual.Add( "c" );
    actual.Add( "a" );
    actual.Add( "b" );
    actual.Add( "e" );
    actual.Add( "d" );

我必须比较两个列表(无论顺序如何).i必须删除其中的额外值 第二个list.if第二个列表包含第一个列表的所有值,然后我必须返回true。

你能否提出任何想法。

2 个答案:

答案 0 :(得分:1)

这是作业吗? ; - )

实现bool函数并在第一行定义bool equal = true;

首先,您应该确定哪个列表更大。如果它们的大小不同,请将bool equal - 变量设置为false,因为它们不相等。

然后迭代较大的一个(或两个中的任何一个,如果它们具有相同的大小)并通过actual.Contains()检查迭代的当前元素是否在列表中。 AFAIK字符串列表检查是否有一个元素等于要在列表中检查的元素。

如果对于较小的列表,此检查为false,则从较大的列表中删除当前元素,因为ist未包含在另一个列表中。同时将bool equal - 变量设置为false,因为列表不再相等。

返回equal变量。

答案 1 :(得分:1)

这样的事情怎么样:我不清楚你的陈述“我必须删除第二个列表中的额外值”,但我想我明白你只想要两个列表的联合。我是对的吗?

        var expected = new List<string>();
        expected.Add("a");
        expected.Add("b");
        expected.Add("c");

        var actual = new List<string>();
        actual.Add("c");
        actual.Add("a");
        actual.Add("b");
        actual.Add("e");
        actual.Add("d");

        // sort the lists
        expected.Sort();
        actual.Sort();

        // if the lists are equal return true;
        if (expected.SequenceEqual(actual))
        {
            // the lists have the same contents -- return true or whatever
        }
        else {
            // union of both lists (abcde)
            var unionOfBoth = expected.Union(actual).ToList();
        }