传智教育 赵建宇 c# 基础
集合元素
ArrayList
- 集合可以添加任意类型,任意长度的元素。
- 数组只能添加固定长度,单一类型的元素。
- ArrayList的参数为object 类型,所以可以添加任意类型元素。
ArrayList list = new ArrayList();
// Add 任意类型的单个元素
list.Add(1);
list.Add(True);
// Add list element
list.AddRange(new int[]{1,2,3,4,5,6,7,8,9});
list.AddRange(list);
// 清空所有元素
list.Clear();
// 删除单个元素,写谁就删谁
list.Remove(true);
list.RemoveAt(num); //删除下标
list.RemoveRange(0,3);
list.Sort();
list.Reverse();
list.Insert(position, content);
list.InsertRange(position, new string[]{"张三","李四"});
bool b = list.contains(1);
list.Count // 实际包含的元素的个数
list.Capacity // 可包含的元素的个数 超过时开辟2的倍数个元素
HashTable 键值对集合
在键值对集合中,是根据键去找值的
using System.Collections;
Hashtable ht = new Hashtable();
ht.Add(1, "Hello");
ht.Add(2, "World");
ht.Add(3, "male");
ht.Add(false, "false");
ht.Contain(key);
ht.ContainKey(key);
ht.ContainValue(value);
ht.clear();
ht.remove(key);
foreach (var item in ht.Values)
{
// var:根据值能够推断出来类型
// C# 是一门强类型语言: 在代码中,必须对每一个变量的类型有一个明确的定义
// js 是一门弱类型语言
Console.WriteLine(item);
}
泛型集合 List
泛型集合类似于数组,元素类型和集合类型一样。
//创建泛型集合对象
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.AddRange(new int[] { 1, 2, 3, 4, 5, 6 });
list.AddRange(list);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
// List 泛型集合可以转换为数组
int[] array = list.ToArray();
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]);
}
array.ToList().ForEach(x => Console.WriteLine(x));
list.ForEach(y => Console.WriteLine(y));
Dictionary 类
static void Main(string[] args)
{
Dictionary<int, string> dic = new Dictionary<int, string>(); // 类似于HashTable, 只不过字典类型是规定好了类型。
dic.Add(1, "hello");
dic.Add(2, "World");
dic.Add(3, "nihao");
dic[1] = "new";
foreach (var item in dic)
{
Console.WriteLine(item);
}
foreach (var item in dic.Keys)
{
Console.WriteLine("{0} ---- {1}",item, dic[item]);
}
foreach (var item in dic.Values)
{
//Console.WriteLine("{0} ---- {1}", item, dic[item]);
}
foreach (KeyValuePair<int,string> item in dic)
{
Console.WriteLine("{0} ---- {1}", item.Key, item.Value);
}
}
Path 类
Path 类是static 静态类,不能创建对象。调用方法是使用className.methodName。
string str = @"c:\3000soft\red spider\data\message\hha.txt";
//获得文件名
Path.GetFileName(str);
Path.GetFileNameWithoutExtension(str);
Path.GetExtension(str);
Path.GetDirectoryName(str);
Path.GetFullPath(str);
Path.Combine(@"c:\a\","b.txt");
File 类
文件操作: File 类一般用来读小文件,否则会浪费很多时间,因为File类读文件时是一次性读取。
File.Create(@"C:\Users\SpringRain\Desktop\new.txt");
File.Delete(@"C:\Users\SpringRain\Desktop\new.txt");
File.Copy(@"C:\Users\SpringRain\Desktop\new.txt",@"C:\Users\SpringRain\Desktop\test.txt");
//Encoding format Unicode:(UTF-8, UTF-32), ASCII, GBK, GB2312
byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\abc.txt");
string s = Encoding.GetEncoding("GB2312").GetString(buffer);
File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\abc.txt", buffer);
string[] contents = File.ReadAllLines(filename, Encoding.default);
foreach (string content in contents)
{
Console.WriteLine(content);
}
string str = File.ReadAllText(filename, Encoding.Default);
Console.WriteLine(str);
FileStream 类
class Programs
{
static void Main(string[] args)
{
// read data
//FileStream fsRead = new FileStream(@"F:21.matplotlib", FileMode.OpenOrCreate, FileAccess.Read);
//byte[] buffer = new byte[1024 * 1024 *5]; //5M
return the actual size of the data
//int r = fsRead.Read(buffer, 0, buffer.Length); // read 5M data start from position 0.
//string s = Encoding.Default.GetString(buffer, 0, r);
//fsRead.Close(); // close stream
//fsRead.Dispose(); // release stream
use FileStream to write data
使用using来创建流,使用完毕后会自动释放空间。
//using(FileStream fsWrite = new FileStream(@"C:\test.txt", FileMode.OpenOrCreate, FileAccess.Write))
//{
// string str = "helloworld nihao ma haha h";
// //byte[] buffer2 = Encoding.Default.GetBytes(str);
// byte[] buffer2 = Encoding.UTF8.GetBytes(str);
// fsWrite.Write(buffer2, 0, buffer2.Length);
//}
string sourceFile = @"F:\21.matplotlib\1.ts";
string targetFile = @"C:\test.ts";
Stopwatch sw = new Stopwatch();
sw.Start();
copyFile(sourceFile, targetFile);
sw.Stop();
Console.WriteLine(sw.Elapsed);
}
public static void copyFile(string sourceFile, string targetFile)
{
using (FileStream fsRead = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
{
using (FileStream fsWrite = new FileStream(targetFile, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte[1024 * 1024 * 5]; //5M
// return the actual size of the data
int r;
do{
r = fsRead.Read(buffer, 0, buffer.Length); // read 5M data start from position 0.
fsWrite.Write(buffer, 0, r);
} while (r != 0);
}
}
}
}
StreamReader 读取文本文件
streamReader 读取文本文件比FileStream 简单一些。 每次从文件中读取一行。
// read from file
using(StreamReader sr = new StreamReader(@"FilePath", Encoding.default))
{
while(!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine());
}
}
// Write to File
//using (StreamWriter sw = new StreamWriter(@"fileName", Encoding.default, true))
using (StreamWriter sw = new StreamWriter(@"fileName", Encoding.default))
{
sw.Write("content"); //覆盖之前的内容, 创建对象时添加变量 true, 就不会覆盖之前的内容
}