gpt4 book ai didi

c# - 在 JavaScript/TypeScript 中实现 IEnumerable

转载 作者:数据小太阳 更新时间:2023-10-29 05:16:16 27 4
gpt4 key购买 nike

我正在尝试在 JavaScript/TypeScript 中实现 C# 关键字 yield(无论哪个):例如,我想实现 the code :

//using System.Collections;  
//using System.Diagnostics;
public static void Process()
{
// Display powers of 2 up to the exponent of 8:
foreach (int number in Power(2, 8))
{
Debug.Write(number.ToString() + " ");
}
// Output: 2 4 8 16 32 64 128 256
}


public static IEnumerable Power(int baseNumber, int highExponent)
{
int result = 1;

for (int counter = 1; counter <= highExponent; counter++)
{
result = result * baseNumber;
yield return result;
}
}

在 JavaScript 中。

最终目标是从另一个 question I asked about on stackoverflow 实现一个用 C# 编写的函数, 在 JavaScript 中:

public static IEnumerable<string> SplitByCharacterType(string input)
{
if (String.IsNullOrEmpty(input))
throw new ArgumentNullException(nameof(input));

StringBuilder segment = new StringBuilder();
segment.Append(input[0]);
var current = Char.GetUnicodeCategory(input[0]);

for (int i = 1; i < input.Length; i++)
{
var next = Char.GetUnicodeCategory(input[i]);
if (next == current)
{
segment.Append(input[i]);
}
else
{
yield return segment.ToString();
segment.Clear();
segment.Append(input[i]);
current = next;
}
}
yield return segment.ToString();
}

有什么想法吗?

最佳答案

我认为没有一种合理的方法可以在 for 循环的上下文中实现这项工作,该循环在“移动下一步”操作期间保留惰性计算的 C# 语义。不过,您可以使用闭包合理地模拟这一点。

(TypeScript 代码):

function getPowers(base: number, maxExponent: number) {
var currentExponent = 1;
return function() {
if(currentExponent > maxExponent) {
return undefined;
} else {
return Math.pow(base, currentExponent++);
}
}
}

// Simple test
var p = getPowers(2, 8);
var n: number;
while((n = p()) !== undefined) {
console.log(n);
}

// Demonstrate that multiple instances work
var p2 = getPowers(2, 3);
var p3 = getPowers(3, 3);
while(true) {
var n2 = p2();
var n3 = p3();
if((n2 || n3) === undefined) break;

console.log(n2 + ", " + n3);
}

关于c# - 在 JavaScript/TypeScript 中实现 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com