针对数组的深入研究

1.针对数组元素的查询和转换操作

加入有个int类型的数组,要转换成double,那该怎么做呢?

数组类型基类有一个Array的ConvertAll方法实现。

实现代码如下:

1 static Converter<int, double> intdouble = delegate(int ele) { return (double)ele; };
2 public static void Main()
3 {
4 int[] intarr = new int[] { 1, 5, 6, 7, 8, 9, 10 };
5 double[] arrdouble = Array.ConvertAll<int, double>(intarr, intdouble);
6 Array.ForEach<double>(arrdouble, ele => { Console.WriteLine("{0:N}\n", ele); });
7
8 }

不知道还有没有更好的办法?

2.针对数组的每个元素都做相同的改变,那该怎么做呢?

可以用   public static void ForEach<T>(T[] array, Action<T> action);这个方法。第二个参数是一个Action的委托。

直接贴出代码了:

1 static void Main(string[] args)
2 {
3 //源数组
4   int[] SourceArr = new int[]
5 {
6 0,1,2,3,4,5,6,7,8,9
7 };
8 //目标数组
9   int[] TargetArr = new int[SourceArr.Length];
10 int index=0;
11 //将施加于每个数组元素的“加工方法”
12 Action<int> DoubleElement = delegate(int element)
13 {
14 TargetArr[index++] = element * 2;
15 };
16 //完成源数组的“加工”
17 Array.ForEach<int>(SourceArr, DoubleElement);
18 //显示处理结果
19 Array.ForEach<int>(TargetArr, (elelm) => { Console.WriteLine(elelm); });
20
21 Console.ReadKey();
22 }

3.数组元素的排序

 排序的方法很多,我就不多说了。我问介绍的一个排序肯定是不常用的。直接上代码了:

ContractedBlock.gifExpandedBlockStart.gifView Code
class Program
{
static void Main(string[] args)
{
MyClass[] Objs
= new MyClass[10];

Random ran
=new Random();
for (int i = 0; i < 10; i++)
Objs[i]
= new MyClass { Value = ran.Next(1, 100) };

Comparison
<MyClass> WhoIsGreater = delegate(MyClass x, MyClass y)
{
if (x.Value > y.Value)
return 1;
else
if (x.Value == y.Value)
return 0;
else
return -1;
};

Array.Sort
<MyClass>(Objs,WhoIsGreater);

Array.ForEach
<MyClass>(Objs,(obj)=>{Console.WriteLine(obj.Value);});

Console.ReadKey();
}
}

class MyClass
{
public int Value;
}

4.在多态数组中筛选特定类型数组

如果一个数组是object,这个数组称为“多态数组”

比如我定义一个  object[] obj = new object[] { 1,"hello",100,"string"};

打算在里面查询出所有字符串数组怎么办?

.net有一个IEnumerable 类型,

定义如下:   public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);

数组基类Array实现IEnumerable<T>接口。可以使用OfType<T>方法从多态数组中选取字符串

object[] obj = new object[] { 1,"hello",100,"string"};

IEnumerable
<string> strs = obj.OfType<string>();
foreach (var item in strs)
{
Console.WriteLine(item);
}

5.检测数组中的元素是否满足某个条件

  数组基类Array提供了相应的静态方法

 public static bool TrueForAll<T>(T[] array, Predicate<T> match);

Predicate<T>是一个委托,返回bool值的方法,此方法代表数组元素必须满足的条件,其接收的参数就是数组元素自身。

例如:检测某整数是否小于100

int[] arr1 = new int[] { 1,2,3,4,8,5};
Predicate
<int> match=delegate(int value){
return value<100?true:false;
};
bool isLessthan100= Array.TrueForAll<int>(arr1, match);
Console.WriteLine(isLessthan100);

6.连动数组的排序

 Array 有一个Sort 重载: public static void Sort<TKey, TValue>(TKey[] keys, TValue[] items);

假设有2个一样长的数组,(分别叫做keys和items),这2个数组的元素是一一对应的。keys数组第一个元素对应的是items第一个数组的元素。

并且这2个数组之间对应是连动关系的。

上述sort方法对应keys数组中的元素进行排序,同事会改变items数组的元素位置。

 回家编辑...

转载于:https://www.cnblogs.com/gaodao/archive/2011/05/18/2049862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值