4
List<Person> PList = new List<Person>();

PList.Add(new Person{ Name = "Bob", email = "Bob.b@blah.org" });

基本的に、これはファイルからの重複の行を保持します

私が理解しようとしているのは、リスト内の各人物のインスタンスが 1 つだけになるまで、いくつでも削除する方法です。

私の最初の考えは、for ループを使用して実行し、比較に基づいて削除することでした。

for (int i = 0; i < List.length; i++)
{
    if (PList.position(i).name == PList.position(i++).name)
      if (PList.position(i).date is < PList.position(i++).date)
        "Then I will delete number 1" 
}

しかし、これを行うためのより良い方法または簡単な方法があるかどうか疑問に思っていますか?

4

2 に答える 2

5

これを試して

PList = PList.GroupBy (x => x.Name).SelectMany (x=>x.OrderBy(y=> y.Date).Take(1))

クエリを実行していません。

アイデアは、最初にグループしてから、グループ化を順序付けてから、順序付けられた各グループの最初にすることです。

于 2012-12-18T04:14:34.397 に答える
0

メソッドを使用し、クラスDistinctの適切な実装GetHasCodeEqualsメソッドを記述しますPerson

public class Person : IEquatable<Person>
{
    public string Name { get; set; }

    public string Email { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null)
        {
            return false;
        }

        if (obj.GetType() != GetType())
        {
            return false;
        }

        return Equals((Person)obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {    
            var hash = 17;

            hash = hash * 23 + (Name == null ? 0 : Name.GetHashCode());
            hash = hash * 23 + (Email == null ? 0 : Email.GetHashCode());

            return hash;
        }
    }

    public bool Equals(Person other)
    {
        if (other == null)
        {
            return false;
        }

        return Name == other.Name && Email == other.Email;
    }
}

次にメソッドを呼び出しますEnumerable.Distinct

于 2012-12-18T04:17:39.610 に答える