背景
一开始刷LeetCode是用Python,后来因为工作原因,大部分的代码需要使用C#来写,所以最近就开始试着使用C#刷题。C#确实写起来比Python麻烦不少,加上对一些刷题用基础数据类型不熟,一开始写得很痛苦,所以就想着在这里开一个坑,把平时Python用的比较顺手的数据结构在C#里的对应用法稍微总结一下,顺便也加深一下自己对C#基本数据结构的认识,遇到新的问题就及时更新吧。
TIPS
max(), min()在C#中的优雅替代品
通常我在用python刷题时,遇到需要维护最大值/最小值时都会使用max(), min()函数,如下边这个矫情的求数组最大值函数。
l = [1, 5, 0, 8]
def find_max_value(l: list) -> int
a = float("-inf")
for i in l:
a = max(a, i) ## 使用max()的场景,使a变量保持最大值,语义明晰简单。
return a
但是在C#中,并没有这么方便的First-class function可以使用,想要在代码中使用类似的函数,有两个较为简单优雅的方法:
- Math类的静态函数
- ? : 三元操作符
using System;
namespace Demo
{
class Program
{
// 使用Math类
public int FindMaxValueWithMathClass(int[] numArray)
{
var a = int.MinValue;
foreach(int n in numArray)
{
a = Math.Max(a, n);
}
return a;
}
// 使用 ? : 三元操作符
public int FindMaxValueWithTernaryOperator(int[] numArray)
{
var a = int.MinValue;
foreach(int n in numArray)
{
a = a > n ? a : n;
}
return a;
}
}
}
写完发现也没什么,但是没找到这俩方法的时候,都是直接上手写if-else的,后边看了essential C#学着用了?: 操作符感觉确实简单了不少,最后查到Math类能提供这俩函数,发现自己真的好蠢,不如好好搜搜,不过倒是加深了一下?:的熟练度,还是记录一下吧。
数据结构
pass