17

C#でアルファベット順にアイテムをリストに挿入する方法を教えてください。

したがって、項目をアルファベット順に追加したいリストに追加するたびに、理論的にはリストが非常に大きくなる可能性があります。

サンプルコード:

Public Class Person
{
     public string Name { get; set; }
     public string Age { get; set; }
}

Public Class Storage
{
    private List<Person> people;

    public Storage
    {
        people = new List<Person>();
    }


    public void addToList(person Person)
    {
        int insertIndex = movies.findindex(
            delegate(Movie movie) 
            {
              return //Stuck here, or Completely off Track.

            }
        people.insert(insertIndex, newPerson);
    }

}
4

5 に答える 5

12

IComparer<T>Interfaceを実装する比較子を定義します。

public class PersonComparer : IComparer<Person>
{
    public int Compare(Person x, Person y)
    {
        return x.Name.CompareTo(y.Name);
    }
}

次にSortedSet<T>クラスを使用します。

        SortedSet<Person> list = new SortedSet<Person>(new PersonComparer());
        list.Add(new Person { Name = "aby", Age = "1" });
        list.Add(new Person { Name = "aab", Age = "2" });
        foreach (Person p in list)
            Console.WriteLine(p.Name);

useinf .NetFramework3.5 に制限されている場合は、SortedList<TKey, TValue>Classを使用できます。

SortedList<string, Person> list = 
          new SortedList<string, Person> (StringComparer.CurrentCulture);
Person person = new Person { Name = "aby", Age = "1" };
list.Add(person.Name, person);
person = new Person { Name = "aab", Age = "2" };
list.Add(person.Name, person);

foreach (Person p in list.Values)
    Console.WriteLine(p.Name);

このクラスとクラスを比較して、MSDN 記事の備考セクションを特に読んでください。SortedDictionary<TKey, TValue>

于 2012-11-01T04:27:30.293 に答える
5

絶対にリストを使用したい場合は、これを試してください:

int loc;
for(loc = 0; loc < people.Count && people[loc].Name.CompareTo(personToInsert.Name) < 0; loc++);
people.Insert(loc, personToInsert);

people[loc].Name.CompareTo(personToInsert.Name) < 0テストしている条件に置き換えることができます。符号を変更して、昇順ではなく降順にすることもできます。たとえばpeople[loc].Age < personToInsert.Age、年齢で並べ替えます。

于 2014-07-16T20:56:21.320 に答える
2

SortedListStringComparer オブジェクトを作成し、それを sortedlist のコンストラクターに渡します。新しい項目が挿入されると、要素は自動的に並べ替えられます。

StringComparer stringComp = StringComparer.CurrentCulture;
SortedList sl = new SortedList(stringComp);
sl.Add("B", "SECOND");
sl.Add("A", "FIRST");
sl.Add("C", "THIRD");
于 2012-11-01T04:33:10.007 に答える
2

SortedSet<T>クラスを見てください。の代わりに使用してList<T>ください。

于 2012-11-01T04:26:36.563 に答える