Самый быстрый способ найти дополнение двух наборов в C#

Да, он всегда указывает на «голову», поскольку версионные развертывания доступны только для дополнений Gmail.

Вышеуказанное основано на том, что единственное руководство по публикации надстройки Gmail включает в себя шаг создания версионного развертывания -> https://developers.google.com/gmail/add-ons/ как-тос / публиковать # step_1_create_a_versioned_deployment

26
задан Sae1962 18 April 2018 в 15:00
поделиться

3 ответа

Используйте Enumerable.Except и, в частности, перегрузку , которая принимает IEqualityComparer :

var complement = c2.Except(c1, new MyTypeEqualityComparer());

Обратите внимание, что это приводит к заданной разнице и, таким образом, дублирует в c2 появится только в результирующем IEnumerable один раз. Здесь вам нужно реализовать IEqualityComparer как что-то вроде

class MyTypeEqualityComparer : IEqualityComparer<MyType> {
    public bool Equals(MyType x, MyType y) {
        return x.Id.Equals(y.Id);
    }

    public int GetHashCode(MyType obj) {
        return obj.Id.GetHashCode();
    }
}
38
ответ дан 28 November 2019 в 07:25
поделиться

При использовании C # 3.0 + Linq:

var complement = from i2 in c2
                 where c1.FirstOrDefault(i1 => i2.Id == i1.Id) == null
                 select i2;

Проходить по дополнению, чтобы получить предметы.

3
ответ дан Kilazur 28 November 2019 в 07:25
поделиться
public class MyTypeComparer : IEqualityComparer<MyType>
{
    public MyTypeComparer()
    {    
    }

    #region IComparer<MyType> Members

    public bool Equals(MyType x, MyType y)
    {
        return string.Equals(x.Id, y.Id);
    }

    public int GetHashCode(MyType obj)
    {
        return base.GetHashCode();
    }

    #endregion     
}

Затем, используя Linq:

c3 collection = new collection().add(c1);
c3.add(c2);
var items = c3.Distinct(new MyTypeComparer());

Вы также можете сделать это, используя обобщения и предикаты. Если вам нужен образец, дайте мне знать.

0
ответ дан 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: