当前位置:编程学习 > C#/ASP.NET >>

请教一个数组的基本问题,多谢多谢

有一个一维数组array 有7个元素

有方法直接得到7个元素中最小值的标号嘛?

例如 
arr2Lines = new int[7] {443, 7, 3232, 4, 23,232,98}; 
那么 最小值标号是3

--------------------编程问答-------------------- 你想问神马? --------------------编程问答-------------------- 如果有不止一个最小数怎么办   这个可以记录多个最小数的下标

 class Program
    {
        static void Main(string[] args)
        {

          int[] array=new int[]{123,234,245,564,4,35,78};
          int min = array[0];
          List<int> Identification = new List<int>();
          for (int i = 0; i < array.Length; i++)
          {
              if (min > array[i])
              {
                  min = array[i];
              }
          }
            for(int i = 0; i < array.Length; i++)
                if (min == array[i])
                {
                    Identification.Add(i);
                }
            foreach (int a in Identification)
                Console.WriteLine(a.ToString());
            Console.ReadKey();
        }
    }
--------------------编程问答-------------------- 我也想知道 --------------------编程问答--------------------

        public void subtract()
        {
            arr2Lines = new int[7] {443, 7, 3232, 4, 23,232,98};  
            int min=1000;
            int s=0;
            for (int i = 0; i < 7; i++)
            {
               if (arr2Lines [i] < min)
               {
                    min = arr2Lines [i];
                    s=i;
               }
            }
            Console.WriteLine("The smallest number is{0}",s);
        }
--------------------编程问答--------------------  var arr2Lines = new int[7] { 1, 1, 1, 1, 1, 1, 98 };
            bool isfrist = true;
            int min = 0;
            List<int> indexs = new List<int>();
            for (int i = 0, n = arr2Lines.Length; i < n; i++)
            {
                if (isfrist)
                {
                    min = arr2Lines[i];
                    isfrist = false;
                    indexs.Add(i);
                }
                else
                {
                    min = min > arr2Lines[i] ? arr2Lines[i] : min;

                    if (min > arr2Lines[i])
                    {
                        indexs.Clear();
                        indexs.Add(i);
                    }
                    if (min == arr2Lines[i])
                    {
                        indexs.Add(i);
                    }
                }
                
                
            }
            for (int i=0,n=indexs.Count; i<n; i++)
            {
                MessageBox.Show(indexs[i].ToString());
            } --------------------编程问答--------------------         int index = 0;
            for (int i = 0; i < arr2Lines.Length; i++)
            {
                if (arr2Lines[i] == arr2Lines.Min())
                {
                    index = i;
                    break;
                }
            } --------------------编程问答--------------------   List<int> ls = arr2Lines.ToList();
              int nindex= ls.FindIndex(x => x == ls.Min()); --------------------编程问答--------------------

            int[] arr = { 5,2,7,1,1};
            StringBuilder temp = new StringBuilder();
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr.Min()==arr[i])
                {
                    temp.Append(i.ToString());
                }
            }
            Console.WriteLine(temp.ToString());
--------------------编程问答--------------------

            int[] arr = { 5,2,7,1,1};
            StringBuilder temp = new StringBuilder();
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr.Min()==arr[i])
                {
                    temp.Append(i.ToString());
                }
            }
            Console.WriteLine(temp.ToString());

是不是想要这个效果? --------------------编程问答--------------------

  int nindex= arr2Lines.ToList().FindIndex(x => x == arr2Lines.Min());

 想偷懒的话, 这样也可以。 --------------------编程问答--------------------

        int GetMinIndex(int[] arr)
        {
            int[] copy = (int[])arr.Clone();
            Array.Sort(copy);
            return Array.IndexOf(arr, copy[0]);
        }
--------------------编程问答-------------------- int[] arr = new int[]{11,2,3,4,5,6,7};
MessageBox.Show(arr.Min().ToString()); --------------------编程问答--------------------  private void button2_Click(object sender, EventArgs e)
        {
            var arr2Lines = new int[7] { 1, 1, 1, 1, 1, 1, 98 };  
            int min = arr2Lines[0];
            List<int> indexs = new List<int>();
            for (int i = 0, n = arr2Lines.Length; i < n; i++)
            {            
                    min = min > arr2Lines[i] ? arr2Lines[i] : min;

                    if (min > arr2Lines[i])
                    {
                        indexs.Clear();
                        indexs.Add(i);
                    }
                    if (min == arr2Lines[i])
                    {
                        indexs.Add(i);
                    }           
            }
            MessageBox.Show("最小值为:"+min.ToString());
            for (int i=0,n=indexs.Count; i<n; i++)
            {
                MessageBox.Show("下标为:"+ indexs[i].ToString());
            }
            
        }

  

         可能有多个最小值吗???? --------------------编程问答-------------------- 自己遍历一遍也可以。
要么就
int nindex= arr2Lines.ToList().FindIndex(x => x == arr2Lines.Min());
不过这样,只能得到第一个位置。 --------------------编程问答--------------------

        var arr2Lines = new[] {443, 7, 3232, 4, 23,4,232,98};
        int minInt = arr2Lines.ToList().Find(x => x == arr2Lines.Min());
        for (int i = 0; i < arr2Lines.Length; i++)
        {
            if (arr2Lines[i] == minInt)
            {
                Response.Write(i + "<br>");
            }
        }


实测通过,先取最小值,然后比对,i 就是你要的做小的索引值 --------------------编程问答--------------------

        var arr2Lines = new[] {443, 7, 3232, 4, 23,4,232,98};
        for (int i = 0; i < arr2Lines.Length; i++)
        {
            if (arr2Lines[i] == arr2Lines.Min())
            {
                Response.Write(i + "<br>");
            }
        }


这个更简单!!! --------------------编程问答-------------------- int GetIndex(int[] iArray)
{
int index=0, iVar=iArray[0];
for(int i=1;i<iArray.Length;i++)
{
if(iVar>iArray[i])
{
index=i;
iVar=iArray[i];
}
}
return index;
} --------------------编程问答--------------------
引用 10 楼  的回复:
C# code


  int nindex= arr2Lines.ToList().FindIndex(x => x == arr2Lines.Min());

 想偷懒的话, 这样也可以。

没有多个的话 Linq就是帅啊. --------------------编程问答-------------------- --------------------编程问答-------------------- 方法很多,一般都是自己写函数找出满足要求的索引,至于那种适合自己的口味,仁者见仁,楼主自己斟酌 --------------------编程问答--------------------
引用 10 楼  的回复:
C# code

  int nindex= arr2Lines.ToList().FindIndex(x => x == arr2Lines.Min());

 想偷懒的话, 这样也可以。


要是俺,VS2005 ,想偷懒也偷不了。。。可恶的lambda。。。


            int[] a=new int[6]{443, 7, 3232, 4, 23,232,98};
            a.Min();
            List<int> b=new List<int>();
            b.Min();
错误 1 “System.Array”并不包含“Min”的定义
错误 2 “System.Collections.Generic.List<int>”并不包含“Min”的定义
????????????、为什么我的没有Min()方法?? --------------------编程问答--------------------
引用 18 楼  的回复:
引用 10 楼 的回复:
C# code


int nindex= arr2Lines.ToList().FindIndex(x => x == arr2Lines.Min());

想偷懒的话, 这样也可以。

没有多个的话 Linq就是帅啊.


原来是LINQ的。。。怪不得 可恶的2005.。。。 --------------------编程问答--------------------
引用 18 楼  的回复:
引用 10 楼 的回复:
C# code


int nindex= arr2Lines.ToList().FindIndex(x => x == arr2Lines.Min());

想偷懒的话, 这样也可以。

没有多个的话 Linq就是帅啊.

最小值只有一个吧……用Linq最简单 --------------------编程问答--------------------
引用 12 楼  的回复:
int[] arr = new int[]{11,2,3,4,5,6,7};
MessageBox.Show(arr.Min().ToString());

这样也可以啊 --------------------编程问答-------------------- 2.0 没有扩展方法。 min()是扩展方法。  --------------------编程问答-------------------- 放弃吧。。 2.0 连tolist都没。  --------------------编程问答-------------------- 就用楼上的那些代码吧。  --------------------编程问答--------------------
引用 3 楼  的回复:
我也想知道
路过而已 --------------------编程问答-------------------- --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,