如何对结构

时间:2016-11-30 11:29:09

标签: c#

我想要做的是按照最后一个参数(Niva)中的输入顺序对每个结构(Säljare1 - Säljare6)进行排序,因此如果Salesman1& 2(Säljare1& 2)已达到Niva(Level)的销售额100样品,然后将显示Säljare1和2的统计数据,然后是“这么多推销员已达到Niva 2。”

那么,我如何指示程序选择参数Niva的排序?

public struct Säljare6
{
    public String Namn;
    public String Personnummer;
    private String Distrikt;
    private int AntalArtiklar;
    private int Niva;



    public string NAMN
    {
        get { return Namn; }
        set { Namn = value; }
    }
    public string PERSONNUMMER
    {
        get { return this.Personnummer; }
        set { this.Personnummer = value; }
    }
    public String DISTRIKT
    {
        get { return Distrikt; }
        set { Distrikt = value; }
    }
    public int ANTALARTIKLAR
    {
        get { return AntalArtiklar; }
        set { AntalArtiklar = value; }
    }
    public int NIVA
    {
        get { return Niva; }
        set { Niva = value; }
    }

    public Säljare6(string Namn6, string Personnummer6, string Distrikt6, int AntalArtiklar6, int Niva6)
    {


        this.Namn = Namn6;
        this.Personnummer = Personnummer6;
        this.Distrikt = Distrikt6;
        this.AntalArtiklar = AntalArtiklar6;
        this.Niva = Niva6;
    }


    public void SkrivUtInfo()
    {

        Console.WriteLine("Namn = {0} && Personnummer = {1} && Distrikt = {2} && AntalArtiklar = {3} && Niva = {4}", this.Namn, this.Personnummer, this.Distrikt, this.AntalArtiklar, this.Niva);
    }
}



class Program
{

    static void Main(string[] args)
    {
        Console.WriteLine("Var Vänlig och skriv in info för säljaren (1,Namn (enter),2, persnr (enter),3, Distrikt(enter),4, AntalArtiklar (enter), 5,Niva 1-4(enter)");
        Säljare1 S1 = new Säljare1(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
        Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
        Säljare2 S2 = new Säljare2(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
        Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
        Säljare3 S3 = new Säljare3(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
        Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
        Säljare4 S4 = new Säljare4(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
        Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
        Säljare5 S5 = new Säljare5(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
        Console.WriteLine("Var Vänlig och skriv in info för nästa säljare (1,Namn (enter), 2,persnr (enter), 3,Distrikt(enter), 4,AntalArtiklar (enter), 5,Niva 1-4(enter)");
        Säljare6 S6 = new Säljare6(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));

        S1.SkrivUtInfo();
        S2.SkrivUtInfo();
        S3.SkrivUtInfo();
        S4.SkrivUtInfo();
        S5.SkrivUtInfo();
        S6.SkrivUtInfo();      

2 个答案:

答案 0 :(得分:0)

正如其他人已经说过的,看起来你创建了几个相同结构的结构。

这是一个示例类,它实现了IComparable接口,允许您使用List.Sort方法。

resolvers += "BeDataDriven" at https://nexus.bedatadriven.com/content/groups/public",
libraryDependencies += "org.renjin" % "renjin-script-engine" % "0.8.1886"

试一试:

public class MyObject : IComparable
{
    public MyObject(string name, int level)
    {
        Name = name;
        Level = level;
    }

    public string Name { get; }
    public int Level { get; }

    public override string ToString()
    {
        return $"{Name}, level {Level}";
    }

    public int CompareTo(object obj)
    {
        var myObj = obj as MyObject;
        if (myObj == null) return -1;

        int compare = Level.CompareTo(myObj.Level);
        if (compare != 0) return compare;

        // objects are in the same order
        // order by name
        return string.Compare(Name, myObj.Name, StringComparison.Ordinal);
    }
}

答案 1 :(得分:0)

从您的代码中可以看出,您已为每个销售人员声明了一个单独的类。您不应该这样做,因为类描述/定义类型的事物 特定事物

您可以使用列表<>为了这。下面的代码显示了两种方法,一种只使用for和foreach,另一种使用' LINQ'与lambdas(第一个例子)对初学者来说可能有点过于先进,但我认为它是如此有用,知道即使是初学者也应该知道可以用它做些什么。

using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        List<Säljare> salesmen = new List<Säljare>();

        var nivaMax = 0;
        for (int i = 0; i < 6; i++)
        {
            Console.WriteLine("Var Vänlig och skriv in info för säljaren (1,Namn (enter),2, persnr (enter),3, Distrikt(enter),4, AntalArtiklar (enter), 5,Niva 1-4(enter)");
            var saljare = new Säljare(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()));
            nivaMax = Math.Max(nivaMax , saljare.NIVA);
            salesmen.Add(saljare);
        }

        //We're telling the GroupBy method what we want to 'group by'
        //this is the 'LINQ' part.
        foreach (var nivaGruppe in salesmen.GroupBy(x => x.NIVA))
        {
            var groupNivå = nivaGruppe.Key;
            var howManyInGroup = nivaGruppe.Count();
            Console.WriteLine("{0} salesmen have reached nivå {1}", howManyInGroup, groupNivå);
        }

        Console.WriteLine("------------------------------------------");

        for (int level = 0; level < nivaMax; level++)
        {
            var salesmenAtLevel = 0;
            foreach (Säljare saljare in salesmen)
            {
                if (saljare.NIVA == level)
                {
                    salesmenAtLevel++;
                }
            }
            if (salesmenAtLevel > 0)
            {
                Console.WriteLine("{0} salesmen have reached nivå {1}", salesmenAtLevel, level);
            }
        }

        Console.ReadKey(true);
    }
}

这是您可以通过文章计算来计算等级的一种方式。

public int NIVA
{
    get 
    { 
        return System.Math.Ceiling(AntalArtiklar / 100.0);
    }
}

另一种方式:

public int NIVA
{ 
    get
    {
        if( this.AntalArtiklar <= 49) return 1;
        if( this.AntalArtiklar <= 99) return 2;
        if( this.AntalArtiklar <= 199) return 3;
        if( this.AntalArtiklar >  199) return 4;
    }
}