Сравните 2 списка чисел в синтаксисе метода LINQ
У меня есть 2 списка номеров.
public int[] numbersA = { 0, 2, 4 };
public int[] numbersB = { 1, 3, 5 };
Мне нужен вывод, как показано ниже
ожидаемый результат
0 is less than 1
0 is less than 3
0 is less than 5
2 is less than 3
2 is less than 5
4 is less than 5
Как это возможно через LINQ
Синтаксис метода?
4 ответа
Решение
С синтаксисом метода:
var result = numbersA.SelectMany(c => numbersB, (c, o) => new { c, o })
.Where(d => d.c < d.o)
.Select(v=> v.c + "is less than"+ v.o);
Временами многословие имеет приоритет над краткостью, поскольку в большинстве случаев его легче и легче читать, хотя, возможно, он печатается немного дольше.
Нет прямого способа достичь того, чего вы хотите, так как вы используете Array вместо List (List имеет ForEach
)
Но если вы хотите с массивами, я предлагаю использовать Array.ForEach
,
int[] numbersA = new int[] { 0, 2, 4 };
int[] numbersB = new int[] { 1, 3, 5 };
Array.ForEach(numbersA, x =>
{
Array.ForEach(numbersB, y =>
{
if (x < y)
Console.WriteLine(x + " is less than " + y);
});
Console.WriteLine(Environment.NewLine);
});
Попробуйте это:
int[] numbersA = { 0, 2, 4 };
int[] numbersB = { 1, 3, 5 };
var result = numbersA.Select(a => numbersB.Where(b => a < b)
.Select(b => a + " is less than " + b))
.SelectMany(arr => arr)
.ToArray();
Хотя этот вопрос является не чем иным, как бесполезной бизнес-логикой, попытка выглядит забавно. Мое решение List.Foreach
скорее, чем Linq
, но это только в одном утверждении.
static void Main(string[] args)
{
int[] numsA = { 0, 2, 4 };
int[] numsB = { 1, 3, 5 };
numsA.ToList().ForEach((a) =>
{
numsB.Where(b => b > a).ToList()
.ForEach((x) =>
{
Console.WriteLine("{0}>{1}", a, x);
});
});
}