#c# #linq
#c# #linq
Вопрос:
У меня есть 2 строковых массива / значения x, y, и я пытаюсь получить значения y, которых нет в x. Я пытаюсь получить это значение только в том случае, если все значения x также находятся в y .
string x = "CA ,WA";
string y = "CA,WA,NY";
var srcDetails = x.ToLower().Replace(" ", string.Empty).Split(',');
var dstDetails = y.ToLower().Replace(" ", string.Empty).Split(',');
var common = dstDetails.Intersect(srcDetails); //common in x,y
var destGreaterSrc= dstDetails.Except(srcDetails); //if y > x
var extraInDest = dstDetails.Except(common);
extraInDest — это дополнительное значение в y, которого нет в x
В приведенном выше коде дополнительные значения в dest, которые выводятся как NY.
Я пытаюсь найти сценарий, в котором значения x могут быть не равны y, например
string x = "CA ,NV";
string y = "CA,WA,NY";
как мы можем сделать вывод var extraInDest равным false.
например, var extraInDest = dstDetails .За исключением (общего) результата false или null
Комментарии:
1. Будет ли ваша строка всегда в формате CSV?
2. Всегда разделяется запятой.
3. строка x = «CA,WA»; строка y = «CA,WA,NY»; var srcDetails = x.Split(‘,’); var dstDetails = y.Split(‘,’); var extraInSrc = srcDetails . Где(s => !dstDetails. Выберите(d => d.Trim() . ToLower()) . Содержит(s.Trim() . ToLower())) . ToList(); if (extraInSrc.Count() <= 0) // Если все значения X присутствуют в Y { var extraInDst = dstDetails . Где(s => !srcDetails. Выберите(d => d.Trim() . ToLower()) . Содержит(s.Trim() . ToLower())) . ToList(); }
4. очень интересный блок кода kashi.
Ответ №1:
Самым простым было бы
var extraInDest = srcDetails.Except(dstDetails).Any()
? null
: dstDetails.Except(srcDetails);
Комментарии:
1. @Kurkula так это вам помогло?
Ответ №2:
Это должно быть просто, если ваше сравнение всегда должно приводить к логическому значению, вы должны использовать это вместо
bool extraInDest = srcDetails.All(v=>dstDetails.Contains(v));