我想将以下 Groovy 代码翻译成 C#
def find_perfect_numbers(def number) {
(2..number).findAll { x-> (1..(x/2)).findAll{ x % it == 0 }.sum() == x }
}
我从这里得到的。
这就是我所拥有的,但它还没有准备好,也没有编译。我对常规代码的理解不够好。
public List<int> find_perfect_numbers(int number)
{
List<int> lst = new List<int>();
lst = 2.To(number).FindAll(x => (1.To(x/2)).FindAll( x % it == 0).Sum() == x);
return lst;
}
我无法翻译该部分x % it == 0
(因为“它”是一个索引)。
- 我希望 C# 代码看起来尽可能像 groovy 函数。具体来说,线
lst = 2.To( ....
. - 我不想使用不同的解决方案来找到完美的数字(我已经有了另一个工作功能)。对我来说,这只是关于语法,而不是关于一个好的“完美数字函数”。
- 可以创建有助于执行此操作的新(扩展)函数,就像我使用的 To 函数一样:
对于上面的 To 函数,我使用了这个 StackOverflow 函数: Generating sets of integers in C# 并对其进行了一些更改,以便它返回一个 int 列表而不是一个 int 数组
public static class ListExtensions
{
public static List<int> To(this int start, int end)
{
return Enumerable.Range(start, end - start + 1).ToList();
}
}
谁能帮我?
=== 更新 ===
这就是我现在所拥有的,但它还没有工作,我得到
DivideByZeroException在部分未处理s.value % s.idx == 0
:
lst = 2.To(number).FindAll(x => ((1.To(x / 2)).Select((y, index) => new {value = y, idx = index}).Where( s => s.value % s.idx == 0).Sum(t => t.value) == (decimal)x));