最近在刷一些算法题 然后在过程中会被难住
在看一些网上大佬的解析 其中有很多没见过的方法
在这里稍微总结一下
1.copy()
顾名思义 copy数组的方法
下面是一个例子
public void Merge(int[] nums1, int m, int[] nums2, int n)
{
int len1 = m - 1;//num1的有效个数
int len2 = n - 1;//num2的有效个数
int len = m + n - 1;
while (len1 >= 0 && len2 >= 0)
{
if (nums1[len1] > nums2[len2])
{
nums1[len] = nums1[len1];
len1--;
}
else
{
nums1[len] = nums2[len2];
len2--;
}
len--;
}
Array.Copy(nums2, 0, nums1, 0, len2 + 1);
// 表示将nums2数组从下标0位置开始,拷贝到nums1数组中,从下标0位置开始,长度为len2+1
2.OrderByDescending降序排列
利用扩展方法OrderByDescending对数组 字典等进行降序排序
3.ThenBy升序排列
利用扩展方法ThenBy对数组 字典等进行升序排序
4.Skip和Take
Skip()和Take()方法都是IEnumerable 接口的扩展方法,包括C#中的所有Collections类,如ArrayList,Queue,Stack等等,还有数组和字符串都可以调用这两个方法。
比如 testList里面是 1,2,3,4,5,6,7,8,9,10
var result = testList.Skip(5); //返回值就是 6,7,8,9,10;
var result = testList.Take(5); //返回值就是 1,2,3,4,5
下面给出一个例子
public IList<string> TopKFrequent(string[] words, int k) {
List<string> list = new List<string>();
Dictionary<string, int> dic = new Dictionary<string, int>();
for (int i = 0; i < words.Length; i++)
{
if (!dic.ContainsKey(words[i]))
{
dic.Add(words[i], 1);
}
else
{
dic[words[i]]++;
}
}
var res = dic.OrderByDescending(s => s.Value).ThenBy(s => s.Key).Take(k).ToList();
for (int i = 0; i < k; i++)
{
list.Add(res[i].Key);
}
return list;
}
5.split 字符串分割
-
public string[] Split(params char[] separator)
程序代码
string[] split = words.Split(new Char[] { ‘,’ });//返回:{“1”,“2.3”,"",“4”}
string[] split = words.Split(new Char[] { ‘,’, ‘.’ });//返回:{“1”,“2”,“3”,"",“4”} -
public string[] Split(char[] separator, int count)
程序代码
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 2);//返回:{“1”,“2.3,4”}
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 6);//返回:{“1”,“2”,“3”,"",“4”} -
public string[] Split(char[] separator, StringSplitOptions options)
程序代码
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2”,“3”,“4”} 不保留空元素
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素 -
public string[] Split(string[] separator, StringSplitOptions options)
程序代码
string[] split = words.Split(new string[] { “,”, “.” }, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2”,“3”,“4”} 不保留空元素
string[] split = words.Split(new string[] { “,”, “.” }, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素 -
public string[] Split(char[] separator, int count, StringSplitOptions options
程序代码
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2.3,4”} 不保留空元素
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 6, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素 -
public string[] Split(string[] separator, int count, StringSplitOptions options)
程序代码
string[] split = words.Split(new string[] { “,”, “.” }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{“1”,“2.3,4”} 不保留空元素
string[] split = words.Split(new string[] { “,”, “.” }, 6, StringSplitOptions.None);//返回:{“1”,“2”,“3”,"",“4”} 保留空元素
需要注意的是没有重载函数public string[] Split(string[] separator),所以我们不能像VB.NET那样使用words.Split(","),而只能使用words.Split(’,’)