ASP.NET Tutorial/Collections/SortedList

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Sorted list

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="UsingSortedList" Debug="true"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <title>SortedList Example</title>

</head> <body>

   <form id="form1" runat="server">

SortedList Examples

     This example illustrates the use of a SortedList collection
     
     <asp:Label ID="labMsg" runat="server" />
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class UsingSortedList : System.Web.UI.Page {

  protected void Page_Load(object sender, EventArgs e)
  {
     Customer c1 = new Customer("1", "A", "AA", "123-4567");
     Customer c2 = new Customer("2", "B", "BB", "123-1267");
     Customer c3 = new Customer("3", "C", "CC", "123-7823");
     Customer c4 = new Customer("4", "D", "DD", "123-6383");
     SortedList mySort = new SortedList();
     mySort.Add(c1.Id, c1);
     mySort.Add(c2.Id, c2);
     mySort.Add(c3.Id, c3);
     mySort.Add(c4.Id, c4);
     foreach (Customer c in mySort.Values)
     {
        labMsg.Text += c.Id + "," + c.LastName + "
"; }
labMsg.Text += "
";
     Customer tempCust1 = (Customer)mySort["1"];
     labMsg.Text += tempCust1.Id + "," + tempCust1.LastName + "
"; Customer tempCust2 = (Customer)mySort.GetByIndex(3); labMsg.Text += tempCust2.Id + "," + tempCust2.LastName + "
"; }

} public abstract class AbstractEntity {

  private string _id;
 public AbstractEntity(string id)
 {
     _id = id;
 }
  public string Id
  {
     get { return _id; }
     set { _id = value; }
  }
  public abstract bool IsValid
  {
     get;
  }

} public class Customer: AbstractEntity {

  private string _firstName;
  private string _lastName;
  private string _phone;
  public Customer(string id, string firstName, string lastName, string phone): base(id)
  {
     _firstName = firstName;
     _lastName = lastName;
     _phone = phone;
  }
  public string FirstName
  {
     get { return _firstName; }
     set { _firstName = value; }
  }
  public string LastName
  {
     get { return _lastName; }
     set { _lastName = value; }
  }
  public string Phone
  {
     get { return _phone; }
     set { _phone = value; }
  }
  public string Name
  {
     get { return LastName + ", " + FirstName; }
  }
  public override bool IsValid
  {
     get
     {
        if (Id.Length > 0 && LastName.Length > 0)
           return true;
        else
           return false;
     }
  }
  public override string ToString()
  {
     return Id + "," + Name + "," + Phone; 
  }

}</source>


Using a SortedList to sort by values by key (C#)

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">
   </form>

</body> </html> File: Default.aspx.cs

using System; using System.Collections; public partial class _Default : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
       Person scott = new Person("A", "B");
       Person bill = new Person("C", "D");
       Person srini = new Person("E", "F");
       Hashtable peopleHashtable = new Hashtable();
       peopleHashtable.Add("sh", scott);
       peopleHashtable.Add("be", bill);
       peopleHashtable.Add("ss", srini);
       SortedList peopleSortedList = new SortedList(peopleHashtable);
       foreach (Person p in peopleSortedList.Values)
       {
           Response.Write(p.FullName + "
"); } Response.Write("Index of E: " + peopleSortedList.IndexOfKey("ss")); }

} public class Person : IComparable {

   string FirstName;
   string LastName;
   public Person(string first, string last)
   {
       FirstName = first;
       LastName = last;
   }
   public string FullName
   {
       get
       {
           return FirstName + " " + LastName;
       }
   }
   int IComparable.rupareTo(object obj)
   {
       Person p2 = obj as Person;
       if (p2 == null) throw new ArgumentException("Object is not a Person!");
       int lastNameResult = this.LastName.rupareTo(p2.LastName);
       if (lastNameResult == 0)
       {
           int firstNameResult = this.FirstName.rupareTo(p2.FirstName);
           return firstNameResult;
       }
       else
       {
           return lastNameResult;
       }
   }

}</source>


Using a SortedList to sort by values by key (VB)

   <source lang="csharp">

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">
   </form>

</body> </html> File: Default.aspx.vb Imports System Imports System.Collections Imports Microsoft.VisualBasic Public Class Person

   Implements IComparable
   Dim FirstName As String
   Dim LastName As String
   Public Sub New(ByVal First As String, ByVal Last As String)
       FirstName = First
       LastName = Last
   End Sub
   Public ReadOnly Property FullName() As String
       Get
           Return FirstName & " " & LastName
       End Get
   End Property
   Public Function CompareTo(ByVal obj As Object) _
       As Integer Implements IComparable.rupareTo
       If Not TypeOf (obj) Is Person Then
           Throw New ArgumentException("Object is not a Person!")
       End If
       Dim p2 As Person = CType(obj, Person)
       Dim lastNameResult As Integer = Me.LastName.rupareTo(p2.LastName)
       If lastNameResult = 0 Then
           Dim firstNameResult As Integer = Me.FirstName.rupareTo(p2.FirstName)
           Return firstNameResult
       Else
           Return lastNameResult
       End If
   End Function

End Class Partial Class _Default

   Inherits System.Web.UI.Page
   Protected Sub Page_Load(ByVal sender As Object, _
           ByVal e As System.EventArgs) Handles Me.Load
       Dim scott As New Person("A", "B")
       Dim bill As New Person("C", "D")
       Dim srini As New Person("E", "F")
       Dim peopleHashtable As New Hashtable()
       peopleHashtable.Add("sh", scott)
       peopleHashtable.Add("be", bill)
       peopleHashtable.Add("ss", srini)
       Dim peopleSortedList As SortedList = New SortedList(peopleHashtable)
       For Each p As Person In peopleSortedList.Values
           Response.Write(p.FullName & "
") Next Response.Write("Index of E: " & peopleSortedList.IndexOfKey("ss")) End Sub

End Class</source>