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 Idif schedules[x].Id == chedules[y].Id -
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;