在Rust中有一个方便的声明叫做match.它的工作原理类似switch,但可能有多个变量.
以下是使用此技术进行fizz-buzz的伪示例:
match (i % 3 == 0, i % 5 == 0) {
(false, false) => { // },
(true, true) => { // FizzBuzz },
(true, false) => { // Fizz },
(false, true) => { // Buzz }
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用C#7进行相同或类似的操作?
为此,我将使用 C# 7 中的元组语法:
class Program
{
enum FizzBuzz
{
None,
Fizz,
Buzz,
FizzBuzz
}
static void Main(string[] args)
{
// Declare the map
Dictionary<(bool, bool), FizzBuzz> matchMap =
new Dictionary<(bool, bool), FizzBuzz>
{
{ (false, false), FizzBuzz.None },
{ (true, true), FizzBuzz.FizzBuzz },
{ (true, false), FizzBuzz.Fizz },
{ (false, true), FizzBuzz.Buzz },
};
// Demonstration of the map
for (int i = 0; i < 16; i++)
{
Console.WriteLine($"i: {i}, (i % 3 == 0, i % 5 == 0): {matchMap[(i % 3 == 0, i % 5 == 0)]}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前,您需要使用 NuGet 包管理器将ValueTuple包添加到项目中以便编译语法。这些ValueTuple类型实现适当的相等比较以允许字典工作。