以数组形式获取结果
Posted
技术标签:
【中文标题】以数组形式获取结果【英文标题】:Getting result as Array 【发布时间】:2018-05-19 11:49:11 【问题描述】:我们正在学习如何使用 Stream Reader,但我遇到了一些方法问题,实际上当我尝试获取返回值时它不起作用。
static void FindeMinMaxVerkauf(Verkauf[] arr, out Verkauf min, out Verkauf max)
double min2 = 10000;
double max2 = 0;
int min3 = 0;
int max3 = 0;
for (int i = 0; i < arr.Length; i++)
if((arr[i].StückPreis * arr[i].Stückzahl) < min2)
min2 = arr[i].StückPreis * arr[i].Stückzahl;
min3 = i;
if ((arr[i].StückPreis * arr[i].Stückzahl) > max2)
max2 = arr[i].StückPreis * arr[i].Stückzahl;
max3 = i;
min = arr[min3];
max = arr[max3];
这就是我试图获取返回值的方式
double min,max;
FindeMinMaxVerkauf(alle, out min, out max);
Console.WriteLine("Verkäufe mit kleinsten Preis " + min + "Verkäufe mit größten Preis" + max );
但它说
CS1503 参数 "3": Konvertierung von "
out double
" in "out _61_T_Shirts.Verkauf" nicht möglich.
这意味着从double
转换为Tshirts
...不可能。我真的不知道如何解决它。
这是我的第二种方法:
static Verkauf FindeHöchsteStückzahl(Verkauf[] arr)
int anz = 0;
int pos = 0;
for (int i = 0; i < arr.Length; i++)
if(arr[i].Stückzahl > anz)
anz = arr[i].Stückzahl;
pos = i;
return arr[pos];
这就是我试图获取返回值的方式:
FindeHöchsteStückzahl(alle);
Console.WriteLine("Höchste Stückzahl: " + alle );
但我得到了 Array 结果:
Höchste Stückzahl: _61_T_Shirts.Verkauf[]
我的意思是:
static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe)
int j = 0;
Verkauf[] finderverk = new Verkauf[10000];
for (int i = 0; i < arr.Length; i++)
if(arr[i].Farbe == farbe)
finderverk[j] = arr[i];
j++;
Array.Resize(ref finderverk, j);
return finderverk;
我需要帮助;D
【问题讨论】:
我不知道你可以在 c# 中使用德语字符。:)out Verkauf min
不是 out double min
- 而且您似乎也没有实现 implicit
转换
是的,通常不会,但我们可以:D
@UnholySheep 我在这 2-3 种方法之前做过,我使用了相同的方法,但这个我不明白
static void FindeMinMaxVerkauf(Verkauf[] arr, out Verkauf min, out Verkauf max)
-> static void FindeMinMaxVerkauf(Verkauf[] arr, out double min, out double max)
。我非常怀疑你用不同的方法做了这个完全相同的代码,它也不会在那里工作。因此,除非您可以提供 minimal reproducible example 来证明这一点,否则这就是您的答案
【参考方案1】:
第一个问题。为什么不只是效仿并声明min
以及max
是Verkauf
?
Verkauf min, max; // Verkauf, not double
FindeMinMaxVerkauf(alle, out min, out max);
// String interpolation - $"... value ..." is more readable
// We have min and max of type Verkauf; we want to print out StückPreis:
Console.WriteLine(
$"Verkäufe mit kleinsten Preis min.StückPreis Verkäufe mit größten Preis max.StückPreis");
第二个问题。您必须保存 FindeHöchsteStückzahl
调用的结果,然后显示它,而不是初始数组:
// Save the result of the method call (sorry for the umlaut)
var hoch = FindeHöchsteStückzahl(alle);
// ... and print out the result (hoch), not the initial array
// If you haven't implement `ToString()` in the Verkauf class
// You, probably, don't want hoch but hoch.StückPreis:
// Console.WriteLine($"Höchste Stückzahl: hoch.StückPreis");
Console.WriteLine($"Höchste Stückzahl: hoch");
编辑:如果你想返回一个数组,即Verkauf[]
(第一和第二个问题合并):
// Array: 1st item is min, 2nd one is max
static Verkauf[] MinMaxVerkauf(Verkauf[] value)
Verkauf min, max;
FindeMinMaxVerkauf(alle, out min, out max);
return new Verkauf[] min, max;
...
var minmax = MinMaxVerkauf(alle);
Console.WriteLine(
$"Verkäufe mit kleinsten Preis minmax[0].StückPreis Verkäufe mit größten Preis minmax[1].StückPreis");
编辑 2:当您想要查询您的数据(找出一些 Farbe
的最大 StückPreis
)时,请尝试使用 Linq 专门为此目的设计的:
using System.Linq;
...
// See how it's easy (the third problem in the question):
static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe)
return arr
.Where(stuck => stuck.Farbe == farbe)
.ToArray();
...
string farbe = "Rot";
double max = alle
.Where(stuck => stuck.Farbe == farbe)
.Max(stuck => stuck.StückPreis);
double min = alle
.Where(stuck => stuck.Farbe == farbe)
.Min(stuck => stuck.StückPreis);
Console.WriteLine(
$"Farbe farbe: Verkäufe mit kleinsten Preis min.StückPreis Verkäufe mit größten Preis max.StückPreis");
【讨论】:
感谢第一个工作,但第二个没有你有我可以联系到你的电子邮件吗? @Kevin Garnick:我明白了;如果您还没有在Verkauf
类中实现ToString()
方法(即.net 不知道如何打印出 Verkauf
实例),则必须明确说明:@987654335 @。您可以在我的个人资料中查看我的电子邮件
谢谢,当我在 Methode 中有 Array 并且我想返回 Array 时,我还有 1 个问题,我应该怎么做? static Verkauf[] FindeVerkäufe(Verkauf[] arr, string farbe) 并且返回是 return finderverk;
@Kevin Garnick:有一个 array 你也想输出数组,你可以这样做:static Verkauf[] SomeMethod(Verkauf[] value) /*implementation*/
我的问题形成了我的问题,我想像 1. 和 2. 方法一样获得返回值(输出)【参考方案2】:
尝试使用 Linq。
它是内置的,并且确实使代码更具可读性:
using System;
using System.Linq;
public class Program
public static void Main()
var ar = new Buy[]
new Buy()Price = 1, Name = "shirt",
new Buy()Price = 2, Name = "hat",
new Buy()Price = 3, Name = "dog"
;
Console.WriteLine(ar.OrderByDescending(b => b.Price).First().Name);
Console.WriteLine(ar.OrderBy(b => b.Price).First().Name);
internal class Buy
public int Price;
public string Name;
打印:
dog
shirt
这应该会引导您朝着正确的方向前进。
【讨论】:
以上是关于以数组形式获取结果的主要内容,如果未能解决你的问题,请参考以下文章
js怎么把对象的属性名和属性值调转(字符串或数字),并将结果以对象的形式存放在变量中?具体如下↓