The Artima Developer Community
Sponsored Link

.NET Buzz Forum
Mit IComparable mehrere Eigenschaften vergleichen

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
-

Posts: 1524
Nickname: nitronic
Registered: Jul, 2006

Norbert Eder works as a software architect.
Mit IComparable mehrere Eigenschaften vergleichen Posted: Jan 16, 2007 1:04 AM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by -.
Original Post: Mit IComparable mehrere Eigenschaften vergleichen
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Latest .NET Buzz Posts
Latest .NET Buzz Posts by -
Latest Posts From Norbert Eder - Living .NET

Advertisement
Nehmen wir als Beispiel eine Highscore-Liste. Hierf��r m��ssen zwei Werte sortiert werden:

- der erreichte Score (absteigend)
- der Name des Spielers (aufsteigend)

Mit Hilfe der Schnittstelle IComparable kann dies einfach erledigt werden. Hierf��r ben��tigen wir die Datenklasse Highscore, welche besagtes Interface implementiert:
using System;
using System.Collections.Generic;
using System.Text;

namespace HighscoreTest
{
    public class Highscore : IComparable
    {
        private string _name = String.Empty;
        private int _score = 0;

        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }

        public int Score
        {
            get { return this._score; }
            set { this._score = value; }
        }

        public Highscore(string name, int score)
        {
            this._name = name;
            this._score = score;
        }

        public override string ToString()
        {
            return this._name.PadRight(20, ' ') + this._score;
        }

        #region IComparable Members

        public int CompareTo(Highscore other)
        {
            if (this._score.CompareTo(other._score) == 0)
                return this._name.CompareTo(other._name);
            else
                return this._score.CompareTo(other._score) * (-1);
       }

        #endregion
    }
}

Wie in der Methode CompareTo zu sehen ist, ist eine signifikante Eigenschaft auszuw��hlen. Diese ist die Eigenschaft, die vorrangig sortiert werden soll. In unserem Fall der Score. Sind die zu vergleichenden Werte identisch, wird der Name sortiert.

Getestet werden kann dies mit Hilfe der folgenden Zeilen:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Diagnostics;

namespace HighscoreTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List highscoreList = new List();
            highscoreList.Add(new Highscore("Norbert2", 17));
            highscoreList.Add(new Highscore("Norbert1", 17));
            highscoreList.Add(new Highscore("Norbert3", 3));
            highscoreList.Add(new Highscore("Karl", 3));

            highscoreList.Sort();

            Debug.WriteLine("Highscore");
            Debug.WriteLine("--------------------");
            foreach(Highscore hscore in highscoreList)
                Debug.WriteLine(hscore);

        }
    }
}

Wie zu sehen ist, gar nicht so schwierig und keinesfalls aufw��ndig.

Read: Mit IComparable mehrere Eigenschaften vergleichen

Topic: XSLT Unleashed - Another use for XML and XSLT Previous Topic   Next Topic Topic: Using Settings in C#

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use