3

私は現在、List<string>次のHTML文字列、主にURLを格納するオブジェクトを持っています。

List[0] = "<a href='#' id='1'>Banana</a>";
List[1] = "<a href='#' id='2'>Orange</a>";
List[2] = "<a href='#' id='3'>Apple</a>";
List[3] = "<a href='#' id='4'>Mango</a>";
...

そして、URLListList<string>を実行してオブジェクトを並べ替えると、 Banana => Orange => Apple => Mangoという順序になりますが、これは私が望んでいたものではありません。URLList.Sort(); (assume thatobject has been instantiated.)

Apple => Banana => Mango => Orangeのように、これらの果物のアルファベット順に並べ替えてもらいたいのですが。

では、どうすればこのカスタムソートを実現できますか?助言がありますか?ありがとう。

4

6 に答える 6

6

簡単な方法が必要で、配列があまり変更されないことが期待される場合:

2012年11月30日編集

List.Sort((x, y) => x.Substring(x.IndexOf(">") + 1, 1).CompareTo(y.Substring(y.IndexOf(">") + 1, 1)));

ここに画像の説明を入力してください

于 2012-11-30T03:15:33.923 に答える
1

私はあなたList<string>をに変えることを検討したいと思いますList<KeyValuePair<string, string>>Key「バナナ」、「アップル」などに設定されてValueいるものと、URL自体であるものを入力できます。次に、で並べ替えることができますKey

于 2012-11-30T02:59:39.530 に答える
0

文字列のデフォルトの並べ替えアルファベット順です。この場合、これはid属性によって制御されます。これは、文字列の最初の部分が異なるためです。比較オブジェクトを取得し、タグを正しく解析して順序を返す独自の比較関数を提供するバージョンのsortを使用することをお勧めします。または、HTMLタグをクラスに読み込んで、これらのオブジェクトのリストとして保存すると、コードが読みやすくなります。

于 2012-11-30T02:58:02.433 に答える
0

これは予想されます。単純な文字列を並べ替えていますが、最初に変化するのはid属性の値です。

ソート順を決定するために呼び出しToString()ていると思いますので、それをオーバーライドして内部テキストのみを返すようにしてみてください。しかし、文字列だけでなく、ここにクラスが必要だと思います。

于 2012-11-30T02:58:31.640 に答える
0

私はC#とASP.NETを初めて使用しますSystem.Web.UI.WebControls.HyperLinkが、文字列の代わりに使用できるかもしれません。

List<HyperLink> links = new List<HyperLink>();

links.Add(new HyperLink() { NavigateURL = "#", ID = "1", Text = "Banana" });
links.Add(new HyperLink() { NavigateURL = "#", ID = "2", Text = "Apple" });
links.Add(new HyperLink() { NavigateURL = "#", ID = "3", Text = "Orange" });
links.Add(new HyperLink() { NavigateURL = "#", ID = "4", Text = "Mango" });

links.Sort((x, y) => x.Text.CompareTo(y.Text));

これらのリンクは、ページ上の別のコントロール(など)に追加できます<div>

Control parent = Page.FindControl("id-of-control");
foreach (HyperLink l in links)
    parent.Controls.Add(l);
于 2012-11-30T03:07:24.050 に答える
-1

リスト内の文字列には、値が。である属性<a href='#' id='1'>Banana</a>が含まれているため、値が。である。よりも小さくなります。したがって、の結果は正しいです。id1<a href='#' id='2'>Orange</a>id2URLList.Sort();

Comparable独自のStringクラスを作成し、equals関数をオーバーライドするか、インターフェイスを実装してから、関数をオーバーライドする必要があると思いますcompare

于 2012-11-30T02:58:49.377 に答える