【问题标题】:C# using Linq form and lambda form : how to find all the multiple of x in an array of numbersC# 使用 Linq 形式和 lambda 形式:如何在数字数组中找到 x 的所有倍数
【发布时间】:2021-04-08 15:54:15
【问题描述】:

我正在尝试创建一个 Linq 查询和一个 linq lambda 表单,它将返回一个数组的所有数字,该数组将是 x 和 y 的倍数。假设 4 和 6。数组看起来像这样: int[] multiple = (3, 6,, 8, 12, 16, 18, 19, 24, 26);

实际答案 linq 查询将返回:6、12、16、18、24,因为它们都是 4 和 6(x 和 y)的倍数。简而言之,所有不等于零的数字都可以被删除,反之亦然……类似的东西。最好同时获得这两种形式。

我是新手,所以我还没有:

int[] numbers = { 3, 6, 8, 12, 16, 18, 19, 24, 26 };

int[] multipleOf = number.Where((x) => multiple.All((y) => y % x == 0)).ToList();

【问题讨论】:

  • 我有点困惑:你的意思是“x and y”还是“x or y”?您说两者,并且您的示例“实际答案”匹配“x 或 y”,但您的代码匹配“x 和 y”(如果我忽略语法错误 numbers != number
  • 另外,请说明您当前的尝试没有达到您的期望以及“Classic linq”和“lambda”之间的区别是什么
  • 我认为 OP 意味着方法语法与查询语法
  • 我的意思是&&。这有点令人困惑。我确实删除了 x 和 y 之间的或。

标签: c# linq lambda


【解决方案1】:

我不确定你的意思是“x 和 y”还是“x 和 y”的倍数,但是:

int x = 4;
int y = 6;

int[] test = new int[] { 3, 6, 8, 12, 16, 18, 19, 24, 26 };

var test2 = test.Where(i => i % x == 0 || i % y == 0).ToList();

var test3 = (from integer in test
             where integer % x == 0 || integer % y == 0
             select integer).ToList();

替换“||”在带有“&&”的 lambda 查询中,如果它应该是两者而不是两者之一。 我已将 ToList() 包括在内,因为您似乎正在寻找一个列表,但您可以使用 ToArray() 或以另一种方式使用可枚举。

【讨论】:

  • 好的,我将使用此示例进行编码。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
相关资源
最近更新 更多