Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to compare two lists based on indexes

I have two lists which are identical in length.
If one list has 4 elements, other list has also 4 elements.
List<string> multipleJMBGs and List<BundleSchedule> schedules

I need to create a check method, which will be checking following:

  • First check if there any duplicates in List<string> and if there is, then grab indexes from that query, and within these indexes check if schedules have same Id if schedules[x].Id == chedules[y].Id

    MEDevel.com: Open-source for Healthcare and Education

    Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

    Visit Medevel

  • there can be multiple same pairs, for example:

"1111", "1111" (indexes [23],[41])
"12345", "12345" (indexes [3],[11])
"16872982342716", "16872982342716" (indexes [29],[33])

those are 3 pairs, so we need to groupBy, and extract their indexes (those numbers are just for example purposes):

private bool CheckIfSameUsersHaveSameServices(List<string> multipleJMBGs, List<BundleSchedule> schedules)
{
    var duplicateJMBGs = multipleJMBGs.GroupBy(x => x)
                .Where(group => group.Count() > 1)
                .Select(group => new { jmbg = group.Key }).ToList();


           
    Dictionary<string, string> indexes = new Dictionary<string, string>();

    //fill in dictionary with indexes
    //23,41
    //3,11
    //29,33

    foreach (var pair in indexes)
    {
        var firstToCompare = schedules.ElementAt(Convert.ToInt32(pair.Key));
        var secondToCompare = schedules.ElementAt(Convert.ToInt32(pair.Value));

        //if only one compared pair has same serviceId, return true
        if (firstToCompare.ServiceTypeComplexityId == secondToCompare.ServiceTypeComplexityId)
        {
            return true;
        }
    }
}

Mine question is how to put in Select of GroupBy query also those indexes from a list?

>Solution :

How about:

Dictionary<string, int> jmbgIds = new Dictionary<string, int>(StringComparer.Ordinal);

for (int index = 0; index < multipleJMBGs.Count; index++)
{
    string jmbg = multipleJMBGs[index];
    int id = schedules[index].ServiceTypeComplexityId;
    if (jmbgIds.TryGetValue(jmbg, out var previousId))
    {
        if (previousId != id)
        {
            return false;
        }
    }
    else
    {
        jmbgIds.Add(jmbg, id);
    }
}

return true;
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading