如何在C#中按升序对这些对象数组进行排序?

时间:2013-11-21 16:15:24

标签: c# arrays sorting

这是我的对象数组

Game[] gameConsoles = new Games[5];
// paramaters are name of the console and game ID
gameConsoles[0] = new Games("Playstation 4", 101);
gameConsoles[1] = new Games("Xbox 1", 108);
gameConsoles[2] = new Games("PS Vita", 110);
gameConsoles[3] = new Games("Wii U", 104);
gameConsoles[4] = new Games("3DS", 102);

for (int i = 0; i < gameConsoles.Length; i++)
{
    gameConsoles[i].display();
}

它基本上会显示每个消息框中的所有5个对象,但是我如何制作它以便它可以根据升序中的游戏ID顺序显示它们?

我在排序常规数字时使用的排序算法。

public void ascendingOrder()
{
    // helper class
    double temp = 0;

    for (int j = 0; j < numbers.Length; j++)
    {
        for (int i = 0; i < numbers.Length - 1; i++)
        {
            if (numbers[i] > numbers[i + 1])
            {
                temp = numbers[i];
                numbers[i] = numbers[i + 1];
                numbers[i + 1] = temp;
            }
        }
    }
}

6 个答案:

答案 0 :(得分:5)

您可以使用LINQ OrderBy

foreach(var item in gameConsole.OrderBy(r=> r.GameID))
{
   item.display();
}

答案 1 :(得分:4)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            SortedDictionary<int, Game> gameConsoles = new SortedDictionary<int, Game>();

            gameConsoles.Add(101, new Game("Playstation 4", 101));
            gameConsoles.Add(108, new Game("Xbox 1", 108));
            gameConsoles.Add(110, new Game("PS Vita", 110));
            gameConsoles.Add(104, new Game("Wii U", 104));
            gameConsoles.Add(102, new Game("3DS", 102));

            foreach (KeyValuePair<int, Game> item in gameConsoles)
            {
                Console.WriteLine(item.Value.ToString());
            }

            Console.ReadKey();
        }
    }

    public class Game
    {
        public Game(string name, int id)
        {
            Id = id;
            Name = name;
        }

        public int Id { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return string.Format("Id: {0} Name: {1}", Id, Name);
        }
    }
}

答案 2 :(得分:3)

在.NET中订购商品有三种常用方法:

以下是您实施IComparable<Games>的方法:

class Games : IComparable<Games> {
    public int CompareTo(Games other) {
        return GameId.CompareTo(other.GameId);
    }
}

现在,您的Games会根据GameId进行排序。

以下是您使用外部IComparer<Games>的方式:

class CompareGamesOnId : IComparer<Games> {
    int Compare(Games a, Games b) {
        return a.GameId.CompareTo(b.GameId);
    }
}

你这样打电话给Sort

Array.Sort(games, new CompareGamesOnId());

答案 3 :(得分:2)

你可以使用1个衬垫。 LINQ适用于不影响集合的操作。

gameConsoles.OrderBy(gc => gc.GameID).ToList().ForEach(g => g.display());

答案 4 :(得分:0)

在游戏上实施IComparable并使用.Sort方法?IComparable

答案 5 :(得分:0)

您可以在不使用可怕的=>符号的情况下尝试LINQ,但当然,出于简单目的,不建议使用它。但是,这解释了=>到底在做什么,

foreach (var item in gameConsole.OrderBy(delegate(Game g) { return g.GameId; }))
{
    item.display();
}