委托和泛型方法实现获得任意类型数组中的最大值

委托方式实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 求任意数组的最大值
{
    class Program
    {
        delegate int CompareDelegate(object o1,object o2);

        static void Main(string[] args)
        {
            object[] array = new object[] {33,22,55,77,11};
            object max = GetMax(array,CompareInt);
            Console.WriteLine(max);

            object maxStr = GetMax(new object[] { "c", "bbbb", "aa" }, CompareString);
            Console.WriteLine(maxStr);

            Console.ReadKey();
        }

        static int CompareInt(object o1, object o2)
        {
            int n1 = Convert.ToInt32(o1);
            int n2 = Convert.ToInt32(o2);

            return n1 - n2;
        }

        static int CompareString(object s1,object s2)
        {
            string str1 = s1.ToString();
            string str2 = s2.ToString();

            return str1.Length - str2.Length;
        }

        static Object GetMax(object[] array,CompareDelegate del)
        {
            object max = array[0];
            for (int i = 1; i < array.Length; i++)
            {
                if (del(max,array[i])<0)
                {
                    max = array[i];
                }
            }
            return max;
        }

    }
}

 

泛型方法实现:(推荐)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _02泛型方法实现任意数组的最大值
{
    delegate int GetMaxDeletate<T>(T t1, T t2);

    class Program
    {
        static void Main(string[] args)
        {
            int maxInt = GetMax<int>(new int[] { 3, 55, 11, 77, 333, 27 }, CompareInt);
            Console.WriteLine(maxInt);

            Person[] persons = { 
                            new Person(){Name="张三",Age =18},
                            new Person(){Name= "李四",Age= 55}
                            };

            Person maxPerson = GetMax<Person>(persons, ComparePerson);
            Console.WriteLine(maxPerson.Name);

            Console.ReadKey();
        }

        //比较数组的大小
        static int CompareInt(int i1, int i2)
        {
            return i1 - i2;
        }

        //比较Person对象的大小
        static int ComparePerson(Person p1, Person p2)
        {
            return p1.Age - p2.Age;
        }

        //T 起到占坑的作用 约束数据的类型
        static T GetMax<T>(T[] array, GetMaxDeletate<T> del)
        {
            T max = array[0];

            for (int i = 1; i < array.Length; i++)
            {
                if (del(max, array[i]) < 0)
                {
                    max = array[i];
                }
            }
            return max;
        }
    }

    class Person
    {
        public string Name { get; set; }

        public int Age { get; set; }

    }
}

 

 

转载于:https://www.cnblogs.com/zxx193/archive/2013/06/07/3125450.html

泛型方法Java中可以使用泛型类参数(T)来实现类型安全的操作。编写一个泛型方法实现任意引用类型数组指定位置元素交换的步骤如下: 1. 使用泛型类参数定义方法,这样就可以在不指定具体类型的情况下编写通用的代码。 2. 方法接受一个泛型数组和两个索引作为参数,用于指定要交换的元素位置。 3. 在方法内部,首先判断传入的索引是否有效(即在数组长度范围内)。 4. 如果有效,使用一个临时变量来保存一个索引位置的元素,然后将另一个索引位置的元素赋值给第一个位置,最后将临时变量的值赋给第二个位置。 下面是一个简单的Java代码示例: ```java public class ArrayUtils { /** * 交换泛型数组中两个位置的元素 * @param array 任意类型数组 * @param index1 第一个索引位置 * @param index2 第二个索引位置 * @param <T> 泛型类 */ public static <T> void swap(T[] array, int index1, int index2) { if (array == null || index1 < 0 || index2 < 0 || index1 >= array.length || index2 >= array.length) { throw new IllegalArgumentException("索引超出数组范围"); } T temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; } } ``` 使用该方法时,传入相应的数组和索引即可。例如: ```java String[] strings = {"apple", "banana", "cherry", "date"}; ArrayUtils.swap(strings, 0, 2); // strings数组现在是 {"cherry", "banana", "apple", "date"} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值