使用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]
);
答案 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);