以数组形式获取结果

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 以及maxVerkauf

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

这应该会引导您朝着正确的方向前进。

【讨论】:

以上是关于以数组形式获取结果的主要内容,如果未能解决你的问题,请参考以下文章

将sql结果作为数组获取

MySQLi以数组形式获取[重复]

js怎么把对象的属性名和属性值调转(字符串或数字),并将结果以对象的形式存放在变量中?具体如下↓

如何使用 Google Bigquery 的 Java API 以 Json 形式获取查询结果

以原始形式将数据保存在数据库中并以 json 格式获取结果

案例:批量删除