C#求数组最大值或最大值位置索引

常见求最大值,是数值型数组,这个通常遍历数组方式,或数组排序即可完成。但对于字符串或日期等非数值类型不能处理。下面给出泛型数组的最大值或最大值位置索引的自定义函数。

数组最大值的位置索引

//传入一个数组,求出一个数组的最大值的位置
public static int MaxIndex<T>(T[] arr) where T : IComparable<T>
{
    var i_Pos = 0;
    var value = arr[0];
    for (var i = 1; i < arr.Length; ++i)
    {
        var _value = arr[i];
        if (_value.CompareTo(value) > 0)
        {
            value = _value;
            i_Pos = i;
        }
    }
    return i_Pos;
}

数组最大值

//传入一个数组,求出一个数组的最大值
public static T MaxValue<T>(T[] arr) where T : IComparable<T>
{
    var i_Pos = 0;
    var value = arr[0];
    for (var i = 1; i < arr.Length; ++i)
    {
        var _value = arr[i];
        if (_value.CompareTo(value) > 0)
        {
            value = _value;
            i_Pos = i;
        }
    }
    return value;
}

测试例如下:

int[] arr = { 2, 31, 148, 754, 9143, 0, 4548149, 645, 2, 54 };
Console.WriteLine("Index={0}, Value={1}, Type={2}",MaxIndex(arr),MaxValue(arr), MaxValue(arr).GetType());
            
DateTime[] days = { DateTime.Parse("2019-10-11"), DateTime.Parse("2010-10-11"), DateTime.Parse("2019-10-11 00:00:00") };//, DateTime.Parse("2020-01-11") };
Console.WriteLine("Index={0}, Value={1}, Type={2}", MaxIndex(days), MaxValue(days), MaxValue(days).GetType());

string[] name = { "asdfg", "asdasda", "asda", "wa", "z" };
Console.WriteLine("Index={0}, Value={1}, Type={2}", MaxIndex(name), MaxValue(name), MaxValue(name).GetType());

测试结果为:
在这里插入图片描述
同样地,你也可以写出一个求最小值的函数。

完整VS示例如下:

using System;

namespace ConsoleApp_Test
{
    class Program
    {
        //传入一个数组,求出一个数组的最大值的位置
        public static int MaxIndex<T>(T[] arr) where T : IComparable<T>
        {
            var i_Pos = 0;
            var value = arr[0];
            for (var i = 1; i < arr.Length; ++i)
            {
                var _value = arr[i];
                if (_value.CompareTo(value) > 0)
                {
                    value = _value;
                    i_Pos = i;
                }
            }
            return i_Pos;
        }
        
        //传入一个数组,求出一个数组的最大值
        public static T MaxValue<T>(T[] arr) where T : IComparable<T>
        {
            var i_Pos = 0;
            var value = arr[0];
            for (var i = 1; i < arr.Length; ++i)
            {
                var _value = arr[i];
                if (_value.CompareTo(value) > 0)
                {
                    value = _value;
                    i_Pos = i;
                }
            }
            return value;
        }

        static void Main(string[] args)
        {
            // 定义一个数组
            int[] arr = { 2, 31, 148, 754, 9143, 0, 4548149, 645, 2, 54 };
            Console.WriteLine("Index={0}, Value={1}, Type={2}",MaxIndex(arr),MaxValue(arr), MaxValue(arr).GetType());
            
            DateTime[] days = { DateTime.Parse("2019-10-11"), DateTime.Parse("2010-10-11"), DateTime.Parse("2019-10-11 00:00:00") };//, DateTime.Parse("2020-01-11") };
            Console.WriteLine("Index={0}, Value={1}, Type={2}", MaxIndex(days), MaxValue(days), MaxValue(days).GetType());

            string[] name = { "asdfg", "asdasda", "asda", "wa", "z" };
            Console.WriteLine("Index={0}, Value={1}, Type={2}", MaxIndex(name), MaxValue(name), MaxValue(name).GetType());

            Console.ReadKey();
        }
    }
}
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值