我目前有一个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 。
那我怎样才能实现这种自定义排序?有什么建议?感谢。
答案 0 :(得分:6)
如果你想要一种简单的方法,你希望你的阵列不会改变太多:
2012年11月30日编辑
List.Sort((x, y) => x.Substring(x.IndexOf(">") + 1, 1).CompareTo(y.Substring(y.IndexOf(">") + 1, 1)));
答案 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
函数。