使用FOR LOOP,如何在数组中显示前三个值?

时间:2014-01-03 07:28:19

标签: c# visual-studio-2010 for-loop

使用For Loop,如何在数组中显示前3个值?

示例我的数组大小是10,并且我在数组中列出了一些值,我想使用for循环来拉出前3个数据并在消息框中显示出来。

//Loop to find Highest Qty of Fish Sold
for (int i = 1; i < fish_name.Length; i++)
{
    if (sales_qty[i] > max_value1)
    {
       max_value1 = sales_qty[i];
       max_index1 = i;
    }

    if (sales_qty[max_index1] > max_value2 && sales_qty[i] != max_value1)
    {
        max_value2 = sales_qty[i];
        max_index2 = i;
    }

    if (sales_qty[max_index2] > max_value3 && sales_qty[i] != max_value1 && sales_qty[i] != max_value2)
    {
        max_value3 = sales_qty[i];
        max_index3 = i;
    }
}

我应该在3 max index使用loop吗?

已更新

目前我想出的是:

    Array.Sort(sales_qty, fish_name);
    Array.Reverse(sales_qty);
    Array.Reverse(fish_name);
    MessageBox.Show("The Top Three Best Selling Fish is: "+ "\n"
                                                          + "1. "
                                                          + fish_name[0]
                                                          + "-" 
                                                          + sales_qty[0] 
                                                          + "\n"
                                                          + "2. "
                                                          + fish_name[1]
                                                          + "-"
                                                          + sales_qty[1]
                                                          + "\n"
                                                          + "3. "
                                                          + fish_name[2]
                                                          + "-"
                                                          + sales_qty[2]
                                                          );

4 个答案:

答案 0 :(得分:5)

那样简单
double[] sales_qty = new double[10] {1,2,3,4,5,6,7,8,9,10};
var result = sales_qty.OrderByDescending(x => x).Take(3);

如果您对最高值的索引感兴趣,请尝试

double[] sales_qty = new double[10] {1,2,3,4,5,6,7,8,9,10};
var result = sales_qty.Select((x, i) => new
{
    Index = i,
    Value = x
}).OrderByDescending(x => x.Value).Take(3);

答案 1 :(得分:0)

创建第二个数组,在循环时,比较所有对象并找到top-3,将它们放在第二个数组中,完成后,在消息框中打印它们。

或者对数组进行排序并挑出3个第一个对象。

答案 2 :(得分:0)

你可以这样做:使用Linq是理想而轻松的

using System;
using System.Linq;

public class Test
{
    static void Main()        
    {
        int[] array = new int[7] { 1, 3, 5, 2, 8, 6, 4 };
        var topThree = (from i in array 
                        orderby i descending 
                        select i).Take(3);

        foreach (var x in topThree)
        {
            Console.WriteLine(x);
        }
    }
}

希望有所帮助......

答案 3 :(得分:0)

首先,正如其他人所说,学习,爱和使用LINQ。它会让你的生活更轻松。

回答这个问题:你似乎没有一个而是两个全等数组,一个是销售量,一个是鱼名。我们首先使用LINQ Zip operator

组合数据
 var zipped = fish_name.Zip(sales_qty, (Name, Qty) => new {Name, Qty});

通过这个声明,我们将两个全等数组合并(压缩)。两个数组(Name和Qty)中的每个项目都使用lambda expression组合为一个具有2个属性的(匿名)对象。

现在,这变得更容易使用。例如,您可以通过数量轻松订购此列表并获取前3个元素:

 var result = zipped.OrderByDescending(item => item.Qty).Take(3);

现在,您可以使用LINQ Select operator格式化每个项目,将列表转换为字符串列表:

 var formattedItems = result.Select((item, index) => 
                string.Format("{0}. {1}-{2}", index, item.Name, item.Qty);

然后使用string.Join格式化您的讯息:

var message = "The Top Three Best Selling Fish is: " + 
              Environment.NewLine + 
              string.Join(Environment.NewLine, formattedItems);

MessageBox.Show(message);