列表<string>自定义排序</string>

时间:2012-11-30 02:54:31

标签: c# asp.net list sorting

我目前有一个List<string>对象,用于存储以下HTML字符串,主要是网址,例如

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>";
...

并且,当我对List<string>对象进行排序时,通过执行URLList.Sort(); (assume that URLList object has been instantiated.),它会给出这样的顺序, Banana =&gt; Orange =&gt; Apple =&gt;芒果,这不是我想要的。

我想根据这些水果的字母顺序排序,就像 Apple =&gt; Banana =&gt; Mango =&gt; Orange

那我怎样才能实现这种自定义排序?有什么建议?感谢。

6 个答案:

答案 0 :(得分:6)

如果你想要一种简单的方法,你希望你的阵列不会改变太多:

2012年11月30日编辑

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

enter image description here

答案 1 :(得分:1)

我考虑将您的List<string>变成List<KeyValuePair<string, string>>。您可以使用Key设置为“Banana”,“Apple”等来填充它,Value是网址本身。然后,您可以对Key进行排序。

答案 2 :(得分:0)

字符串默认排序按字母顺序排列,在这种情况下由id属性控制,因为这是不同字符串的第一部分。您可以使用排序which takes a comparison object 的版本,并提供自己的比较功能,正确解析您的代码并返回订单。或者将HTML标记读入类中,并将其存储为这些对象的列表,这样可以使代码更具可读性。

答案 3 :(得分:0)

这是预期的。您正在对简单字符串进行排序,它们变化的第一个位置是id属性的值。

我假设它正在调用ToString()来确定排序顺序,因此您可以尝试重写它以仅返回内部文本。但我真的认为你需要一个班级,而不仅仅是字符串。

答案 4 :(得分: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);

答案 5 :(得分:-1)

因为在您的列表中,字符串<a href='#' id='1'>Banana</a>包含id属性,其值为1,它小于<a href='#' id='2'>Orange</a>,其id值为{ {1}}。所以2的结果是正确的。

我认为您需要创建自己的String类,并覆盖equals函数,或实现URLList.Sort();接口,然后覆盖Comparable函数。