如何在 C# 中模仿 Javascript "spread operator"?
How can I mimic a Javascript "spread operator" in C#?
我正在关注 youtube 上的动态编程教程以了解更多关于递归函数的信息,但我被困在使用展开运算符的地方。
代码在JavaScript
const howSum = (targetSum, numbers) =>{
if(targetSum === 0) return [];
if(targetSum < 0) return null;
for(let num of numbers){
const remainder = targetSum - num;
const remainderResult = howSum(remainder, numbers);
if(remainderResult != null){
return [...remainderResult, num];
}
}
return null;
};
这是我尝试复制函数的 C# 代码
class HowSumSlow {
static dynamic HowSum(int targetSum, int[] numbers)
{
if (targetSum == 0) return numbers;
if (targetSum < 0) return null;
foreach( var num in numbers){
var remainder = targetSum - num;
int[] remainderResult = HowSum(remainder, numbers);
if (remainderResult != null) {
//Code here//
}
}
return null;
}
static void Main(string[] arg) {
int[] numbers = new int[] { 2, 3 };
Console.WriteLine(HowSum(7, numbers));
}
}
编辑:我应该使用字典和键吗?我不明白如何解决这个问题。
static Dictionary<int, int[]> spread = new Dictionary<int, int[]>();
static dynamic HowSum(int targetSum, int[] numbers){
...
if(spread.ContainsKey(remainderResult)){
return spread[remainderResult];
}
}
编辑:
class HowSumSlow {
static int[] HowSum(int targetSum, int[] numbers)
{
int[] empty = new int[] { };
if (targetSum == 0) return empty;
if (targetSum < 0) return null;
foreach( var num in numbers){
var remainder = targetSum - num;
int[] remainderResult = HowSum(remainder, numbers);
if (remainderResult != null){
return remainderResult.Append(num).ToArray();
}
}
return null;
}
static void Main(string[] arg) {
int[] numbers = new int[] { 2, 3, 5 };
Console.WriteLine(String.Join(",", HowSum(8, numbers)));
}
}
c#中没有展开运算符,可以使用System.Linq
命名空间中的Append
方法。由于此 return 是一个 IEnumerable<T>
,您还需要在之后调用 ToArray()
。
JS中的这一行
return [...remainderResult, num];
在c#中可能是下面的
return remainderResult.Append(num).ToArray();
请注意,您的方法总是 returns int[]
或 null,因此 return 类型应该是 int[]
而不是 dynamic
!
我正在关注 youtube 上的动态编程教程以了解更多关于递归函数的信息,但我被困在使用展开运算符的地方。
代码在JavaScript
const howSum = (targetSum, numbers) =>{
if(targetSum === 0) return [];
if(targetSum < 0) return null;
for(let num of numbers){
const remainder = targetSum - num;
const remainderResult = howSum(remainder, numbers);
if(remainderResult != null){
return [...remainderResult, num];
}
}
return null;
};
这是我尝试复制函数的 C# 代码
class HowSumSlow {
static dynamic HowSum(int targetSum, int[] numbers)
{
if (targetSum == 0) return numbers;
if (targetSum < 0) return null;
foreach( var num in numbers){
var remainder = targetSum - num;
int[] remainderResult = HowSum(remainder, numbers);
if (remainderResult != null) {
//Code here//
}
}
return null;
}
static void Main(string[] arg) {
int[] numbers = new int[] { 2, 3 };
Console.WriteLine(HowSum(7, numbers));
}
}
编辑:我应该使用字典和键吗?我不明白如何解决这个问题。
static Dictionary<int, int[]> spread = new Dictionary<int, int[]>();
static dynamic HowSum(int targetSum, int[] numbers){
...
if(spread.ContainsKey(remainderResult)){
return spread[remainderResult];
}
}
编辑:
class HowSumSlow {
static int[] HowSum(int targetSum, int[] numbers)
{
int[] empty = new int[] { };
if (targetSum == 0) return empty;
if (targetSum < 0) return null;
foreach( var num in numbers){
var remainder = targetSum - num;
int[] remainderResult = HowSum(remainder, numbers);
if (remainderResult != null){
return remainderResult.Append(num).ToArray();
}
}
return null;
}
static void Main(string[] arg) {
int[] numbers = new int[] { 2, 3, 5 };
Console.WriteLine(String.Join(",", HowSum(8, numbers)));
}
}
c#中没有展开运算符,可以使用System.Linq
命名空间中的Append
方法。由于此 return 是一个 IEnumerable<T>
,您还需要在之后调用 ToArray()
。
JS中的这一行
return [...remainderResult, num];
在c#中可能是下面的
return remainderResult.Append(num).ToArray();
请注意,您的方法总是 returns int[]
或 null,因此 return 类型应该是 int[]
而不是 dynamic
!