封装一个数组类
来源:互联网 发布:stc单片机pwm程序 编辑:程序博客网 时间:2024/05/20 16:35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace 封装数组类
{
class Program
{
static void Main(string[] args)
{
ArrayList alist = new ArrayList();
alist.Add(1);
alist.Add(2);
//alist.RemoveAt(3);
//Console.WriteLine(alist[3]);
MyArrayList<string> myL = new MyArrayList<string>(9);
myL[0] = "12";
myL[1] = "2";
myL[2] = "13";
myL[3] = "21";
myL[4] = "e";
myL[5] = "b";
myL[6] = "a";
myL[7] = "e";
myL[8] = "a";
#region 测试
//myL.UnShift(3);
//myL.Push(4);
//myL.Shift();
//myL.Pop();
//int index = myL.IndexOf(3,4);
//Console.WriteLine("搜寻的下标为:{0}",index);
//index = myL.LastIndexOf(3);
//Console.WriteLine("搜寻的下标为:{0}", index);
//myL.Splice(1, 1);
//for (int i = 0; i < myL.Len; i++)
//{
// Console.WriteLine(myL[i]);
//}
#endregion
//myL.UnShift(9);
//int[] a = { 9, 9, 9, 9 };
//myL.Concat(a);
//myL.Reverse();
//myL.Repeat(1, 89);
myL.Sort();
//myL.Repeat("a","as");
for (int i = 0; i < myL.Len; i++)
{
Console.WriteLine(myL[i]);
}
Console.ReadKey();
}
}
class MyArrayList<T>
{
T[] arr = null; //数组
T[] brr = null; //中间数组
int len = 0; //数组长度
//构造函数
public MyArrayList(int i)
{
len = i; //通过构造函数定义容器长度
arr = new T[len];
}
//数组长度的属性
public int Len
{
get { return len; }
}
//索引器
public T this[int index]
{
get { return arr[index]; }
set { arr[index] = value; }
}
//在数组首位添加一个新的元素
public void UnShift(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[0] = t;
for (int i = 0; i < len; i++)
{
arr[i + 1] = brr[i];
}
len = arr.Length;
brr = null;
}
//在数组尾部添加一个新的元素
public void Push(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[arr.Length-1] = t;
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
}
//删除首位的第一个元素并返回元素
public T Shift()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T firstElement = brr[0];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i + 1];
}
len = arr.Length;
brr = null;
return firstElement;
}
//删除尾部最后一个元素并返回
public T Pop()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T lastElement = brr[len-1];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
return lastElement;
}
//splice(开始添加或删除的下标,删除的个数,添加的元素)
public void Splice(int IOindex, int IOcount)
{
int index = IOindex;
int count = IOcount;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count];
//i是原来数组的索引,j是新数组的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
i = i + count;
}
arr[j] = brr[i];
}
len = arr.Length;
brr = null;
}
public void Splice(int IOindex, int IOcount, params T[] a)
{
int index = IOindex;
int count = IOcount;
T[] add = a;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count + add.Length];
//i是原来数组的索引,j是新数组的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
for (int k = 0; k < add.Length; k++)
{
arr[j] = add[k];
j++;
}
j--;
i = i + count - 1;
}
else
{
arr[j] = brr[i];
}
}
len = arr.Length;
brr = null;
}
//IndexOf(要查询的元素);IndexOf(要查询的元素,开始查询的下标);LastIndexOf(要查询的元素)
public int IndexOf(T t)
{
int index = -1;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int IndexOf(T t, int IOindex)
{
int index = -1;
for (int i = IOindex; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int LastIndexOf(T t)
{
int index = -1;
for (int i = arr.Length - 1; i >= 0; i--)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
//concat()把新数组连接到老数组的后面
public void Concat(T[] t)
{
brr = new T[len];
brr = arr;
arr = new T[len + t.Length];
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
for (int i = len, j = 0; i < arr.Length; i++, j++)
{
arr[i] = t[j];
}
len = arr.Length;
brr = null;
}
//reverse()倒序
public void Reverse()
{
brr = new T[len];
brr = arr;
arr = new T[len];
for (int i = 0; i < len; i++)
{
arr[len - i - 1] = brr[i];
}
brr = null;
}
//sort()按顺序从小到大
#region
//public void Sort()
//{
// brr = new T[len];
// brr = arr;
// arr = new T[len];
// for (int i = 0; i < len; i++)
// {
// T tMin = brr.Min(); //原数组最小元素
// arr[i] = tMin; //最小元素赋给新数组
// //原数组减去最小元素
// //最小元素的位置
// int index = 0;
// for (int z = 0; z < brr.Length; z++)
// {
// if (brr[z].Equals(tMin))
// {
// index = z;
// break;
// }
// }
// //去除最小元素 形成新数组
// T[] crr = brr;
// brr = new T[brr.Length - 1];
// for (int j = 0, k = 0; j < brr.Length; j++, k++) {
// if (j == index) {
// k++;
// }
// brr[j] = crr[k];
// }
// }
// brr = null;
//}
#endregion
public void Sort() {
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < i; j++) {
if (arr[i].ToString().CompareTo(arr[j].ToString())<0)
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//repeat(int i, T value);修改 repeat(T oldvalue,T newvalue)
public void Repeat(int IOindex, T value)
{
arr[IOindex] = value;
}
public void Repeat(T oldvalue, T newvalue)
{
int index = IndexOf(oldvalue);
if (index != null)
{
arr[index] = newvalue;
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace 封装数组类
{
class Program
{
static void Main(string[] args)
{
ArrayList alist = new ArrayList();
alist.Add(1);
alist.Add(2);
//alist.RemoveAt(3);
//Console.WriteLine(alist[3]);
MyArrayList<string> myL = new MyArrayList<string>(9);
myL[0] = "12";
myL[1] = "2";
myL[2] = "13";
myL[3] = "21";
myL[4] = "e";
myL[5] = "b";
myL[6] = "a";
myL[7] = "e";
myL[8] = "a";
#region 测试
//myL.UnShift(3);
//myL.Push(4);
//myL.Shift();
//myL.Pop();
//int index = myL.IndexOf(3,4);
//Console.WriteLine("搜寻的下标为:{0}",index);
//index = myL.LastIndexOf(3);
//Console.WriteLine("搜寻的下标为:{0}", index);
//myL.Splice(1, 1);
//for (int i = 0; i < myL.Len; i++)
//{
// Console.WriteLine(myL[i]);
//}
#endregion
//myL.UnShift(9);
//int[] a = { 9, 9, 9, 9 };
//myL.Concat(a);
//myL.Reverse();
//myL.Repeat(1, 89);
myL.Sort();
//myL.Repeat("a","as");
for (int i = 0; i < myL.Len; i++)
{
Console.WriteLine(myL[i]);
}
Console.ReadKey();
}
}
class MyArrayList<T>
{
T[] arr = null; //数组
T[] brr = null; //中间数组
int len = 0; //数组长度
//构造函数
public MyArrayList(int i)
{
len = i; //通过构造函数定义容器长度
arr = new T[len];
}
//数组长度的属性
public int Len
{
get { return len; }
}
//索引器
public T this[int index]
{
get { return arr[index]; }
set { arr[index] = value; }
}
//在数组首位添加一个新的元素
public void UnShift(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[0] = t;
for (int i = 0; i < len; i++)
{
arr[i + 1] = brr[i];
}
len = arr.Length;
brr = null;
}
//在数组尾部添加一个新的元素
public void Push(T t)
{
brr = new T[len];
brr = arr;
arr = new T[len + 1];
arr[arr.Length-1] = t;
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
}
//删除首位的第一个元素并返回元素
public T Shift()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T firstElement = brr[0];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i + 1];
}
len = arr.Length;
brr = null;
return firstElement;
}
//删除尾部最后一个元素并返回
public T Pop()
{
brr = new T[len];
brr = arr;
arr = new T[len - 1];
T lastElement = brr[len-1];
for (int i = 0; i < len - 1; i++)
{
arr[i] = brr[i];
}
len = arr.Length;
brr = null;
return lastElement;
}
//splice(开始添加或删除的下标,删除的个数,添加的元素)
public void Splice(int IOindex, int IOcount)
{
int index = IOindex;
int count = IOcount;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count];
//i是原来数组的索引,j是新数组的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
i = i + count;
}
arr[j] = brr[i];
}
len = arr.Length;
brr = null;
}
public void Splice(int IOindex, int IOcount, params T[] a)
{
int index = IOindex;
int count = IOcount;
T[] add = a;
//Console.WriteLine("t = {0}", add);
brr = new T[len];
brr = arr;
arr = new T[len - count + add.Length];
//i是原来数组的索引,j是新数组的索引
for (int i = 0, j = 0; i < len; i++, j++)
{
if (j == index)
{
for (int k = 0; k < add.Length; k++)
{
arr[j] = add[k];
j++;
}
j--;
i = i + count - 1;
}
else
{
arr[j] = brr[i];
}
}
len = arr.Length;
brr = null;
}
//IndexOf(要查询的元素);IndexOf(要查询的元素,开始查询的下标);LastIndexOf(要查询的元素)
public int IndexOf(T t)
{
int index = -1;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int IndexOf(T t, int IOindex)
{
int index = -1;
for (int i = IOindex; i < arr.Length; i++)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
public int LastIndexOf(T t)
{
int index = -1;
for (int i = arr.Length - 1; i >= 0; i--)
{
if (arr[i].Equals(t))
{
index = i;
break;
}
}
return index;
}
//concat()把新数组连接到老数组的后面
public void Concat(T[] t)
{
brr = new T[len];
brr = arr;
arr = new T[len + t.Length];
for (int i = 0; i < len; i++)
{
arr[i] = brr[i];
}
for (int i = len, j = 0; i < arr.Length; i++, j++)
{
arr[i] = t[j];
}
len = arr.Length;
brr = null;
}
//reverse()倒序
public void Reverse()
{
brr = new T[len];
brr = arr;
arr = new T[len];
for (int i = 0; i < len; i++)
{
arr[len - i - 1] = brr[i];
}
brr = null;
}
//sort()按顺序从小到大
#region
//public void Sort()
//{
// brr = new T[len];
// brr = arr;
// arr = new T[len];
// for (int i = 0; i < len; i++)
// {
// T tMin = brr.Min(); //原数组最小元素
// arr[i] = tMin; //最小元素赋给新数组
// //原数组减去最小元素
// //最小元素的位置
// int index = 0;
// for (int z = 0; z < brr.Length; z++)
// {
// if (brr[z].Equals(tMin))
// {
// index = z;
// break;
// }
// }
// //去除最小元素 形成新数组
// T[] crr = brr;
// brr = new T[brr.Length - 1];
// for (int j = 0, k = 0; j < brr.Length; j++, k++) {
// if (j == index) {
// k++;
// }
// brr[j] = crr[k];
// }
// }
// brr = null;
//}
#endregion
public void Sort() {
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < i; j++) {
if (arr[i].ToString().CompareTo(arr[j].ToString())<0)
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//repeat(int i, T value);修改 repeat(T oldvalue,T newvalue)
public void Repeat(int IOindex, T value)
{
arr[IOindex] = value;
}
public void Repeat(T oldvalue, T newvalue)
{
int index = IndexOf(oldvalue);
if (index != null)
{
arr[index] = newvalue;
}
}
}
}
0 0
- 封装一个数组类
- 索引器(封装一个数组类)改params关键字
- Asp数组类封装
- java封装数组类
- 索引器(封装一个数组集合)
- C语言中用struct封装一个数组
- 一个线程封装类
- 封装一个类
- ios25-封装一个类---
- Cal:一个封装类,利用方法对数组进行各种操作
- 动态数组类的封装
- iOS -- 如何封装一个元素是字典的数组
- 一个封装的Ajax类
- smarty的一个封装类
- 一个封装的jacob类
- 自己动手封装一个string类
- 【insigma】封装一个基本类
- CException 类的一个封装
- session机制及应用详解
- 客户端触发Asp.net中服务端控件事件
- docker 安装步骤
- java文件操作大全
- [MSSQL]SQL 查找表名,字段名
- 封装一个数组类
- Java基础(一):Java面向对象、面向对象封装、抽象类、接口、static、final
- C语言获取文件大小
- hdoj 5438 Ponds 【拓扑 + DFS】
- my sql case when语句、join语句用法
- 数据库悲观锁和乐观锁
- 凸二次规划的解法(旋转算法)
- 当前目录下通用的Makefile文件
- IOS常用工具类宏定义