0

次のようなオブジェクトがあります。

public class TestObject {

        private string name = string.Empty;
        private List<int> ids;

        public TestObject(List<int> ids, string name)
        {
            this.ids = ids;
            this.name = name;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public List<int> Ids
        {
            get { return ids; }
            set { ids = value; }
        }

    }

次のようなオブジェクトのリストを取得します。

List<TestObject> listTest = new List<TestObject>();
listTest.Add(new TestObject((new int[] { 0, 1, 5 }).ToList(), "Test1"));
listTest.Add(new TestObject((new int[] { 10, 35, 15 }).ToList(), "Test2"));
listTest.Add(new TestObject((new int[] { 55 }).ToList(), "Test3"));
listTest.Add(new TestObject((new int[] { 44 }).ToList(), "Test4"));
listTest.Add(new TestObject((new int[] { 7, 17  }).ToList(), "Test5"));

次に、次のような整数のリストがいくつかあります。

List<int> list1 = new List<int>();
list1.Add(0);
list1.Add(1);
list1.Add(5);

List<int> list2 = new List<int>();
list2.Add(4);


List<int> list3 = new List<int>();
list3.Add(7);

List<int> list4 = new List<int>();
list4.Add(55);

私がやりたいことは、これらの整数リストを TestObject リストに対してチェックし、等しい TestObjects を抽出できるようにすることです。つまり、この例では、list1 はオブジェクトの位置 0 でヒットを検出し、list4 は位置 2 でヒットを検出します。位置 4 にはパーシャルのみが存在し、list2 にはヒットがないため、list3 にはヒットがありません。存在しないので。

「Except」でできると最初に思った。それで、n の位置で listN と listTest の間に何もなければ、それはヒットですか?? 問題は、listN を listTest の位置 N にあるオブジェクトのリストと比較する方法です??

4

2 に答える 2

5

リスト内の項目の順序が気になる場合は、spenderソリューションが適しています。

ただし、項目の順序が重要でない場合 (例:に{5, 1, 0}一致{0, 1, 5}する必要がある場合)、次のようなものを使用できます。

listTest.Where(t => t.Ids.Count == list4.Count && !t.Ids.Except(list4).Any());

またはさらに良い:

var list4Hash = new HashSet(list4);
listTest.Where(t => list4Hash.SetEquals(t.Ids));
于 2013-09-17T21:48:07.417 に答える
1
listTest.Where(lt => lt.Ids.SequenceEqual(someOtherList))
于 2013-09-17T21:42:40.067 に答える