dev
dev

Reputation: 918

Find related id from array in C#

I have array of pets object. I want to assign same number to Duplicate property if any pet are in RelatedTo property. I can tell which pet are related to based on same Duplicate number.

Pet object can be modify.

class Pet
{
    public int id { get; set;}
    public string Name { get; set; }
    public int Age { get; set; }
    public bool Vaccinated { get; set; }
    public string RelatedTo {get; set; }
    public int DuplicateTo {get; set;}
}

Pet[] pets ={ 
        new Pet { id = 1 ,Name="Barly", Age=8, Vaccinated=true , RelatedTo = "7,5"},
        new Pet { id = 3, Name="Robi", Age=3, Vaccinated=false, RelatedTo= "2" } ,
        new Pet { id = 2, Name="Toni", Age=1, Vaccinated=false, RelatedTo= "3" },
        new Pet { id = 7, Name="why", Age=4, Vaccinated=false, RelatedTo= "5,1" },
        new Pet { id = 5, Name="what", Age=1, Vaccinated=false, RelatedTo= "7,1" } 
        };

With DuplicateTo

Pet[] pets ={ 
        new Pet { id = 1 ,Name="Barly", Age=8, Vaccinated=true , RelatedTo = "7,5" , DuplicateTo = 1},
        new Pet { id = 3, Name="Robi", Age=3, Vaccinated=false, RelatedTo= "2" , DuplicateTo = 2} ,
        new Pet { id = 2, Name="Toni", Age=1, Vaccinated=false, RelatedTo= "3" , DuplicateTo = 2},
        new Pet { id = 7, Name="why", Age=4, Vaccinated=false, RelatedTo= "5,1" , DuplicateTo = 1},
        new Pet { id = 5, Name="what", Age=1, Vaccinated=false, RelatedTo= "7,1" , DuplicateTo = 1} 
        };

Upvotes: 0

Views: 51

Answers (1)

jhmt
jhmt

Reputation: 1421

If you want to set the same number to a pet and related ones, this C# code will work.

private Pet[] SetDuplicateTo(Pet[] pets)
{
    int currentDupNumber = 1;
    foreach (var pet1 in pets)
    {
        if (pet1.DuplicateTo > 0) { continue; }
        var relatedPets = (from p in pets where pet1.RelatedTo.Split(',').Select(r => r.Trim()).Contains(p.id.ToString()) select p).ToList();
        if (relatedPets.Count > 0)
        {
            pet1.DuplicateTo = currentDupNumber;
            foreach (var pet2 in relatedPets)
            {
                pet2.DuplicateTo = currentDupNumber;
            }
        }
        currentDupNumber++;
    }
    return pets;
}

Upvotes: 1

Related Questions