[英]How to sort a two dimensional string array and assign it to a label
new List<string[]> list = new List<string[]>();
for (int i = 0; i < contentList.Count; i++) //contentList is a list which can have many rows of data...
{
string str1 = contentList[i].Quicklink; // Get data 1
string str2 = contentList[i].Title; // Get data 2
list.Add(new[] { str1, str2 });
}
//SORT THE LIST based by `str2`
for (int p = 0; p < list.Count; p++)
{
Label1.Text += str1 + " " + str2 "\r\n";;
}
如何根据str2
值对列表进行排序,然后将键对值分配给标签。
为此你有linq:
var sorted = list.OrderBy(item => item[1]);
然后你可以这样做:
foreach(var item in sorted)
Label1.Text += item[0] + " " + item[1] + "\r\n"; //forgot the "+"
假设您并不真正需要list
用于任何其他目的,我们可以通过按照我们想要的顺序迭代contentList
来在一个循环中执行此操作(此方法有利于更明显地了解我们的方式排序数据)。
var sb = new StringBuilder();
foreach (var c in contentList.OrderBy(x => x.Title))
{
sb.Append(String.Format("{0} {1}\r\n", c.QuickLink, c.Title));
}
Label1.Text = sb.ToString();
注意:使用StringBuilder
实现进行更新,并且只对Label1.Text
一次赋值。
最简单的方法是使用LINQ:
list.OrderBy(arr => arr[1]).ToList()
对不起,无法测试,因为我正在通过手机接听电话。
你可以使用sring.Concat,它有一个接受IEnumerable的重载
var sorted = from l in list.OrderBy(item => item[1])
select l[0]+" "+l[1]+"\r\n";
Label1.Text = string.Concat(sorted);
尝试
StringBuilder sb = new StringBuilder();
foreach(var content in contentList.OrderBy(p=>p.Title)) {
sb.Append(content.Quicklink);
sb.Append(" ");
sb.Append(content.Title);
sb.Append(Environment.NewLine);
}
Label1.Text = sb.ToString();
注意:字符串生成器很方便,因为字符串是不可变的,并且在字符串上使用+
运算符不小心每次都会创建一个新字符串。 String Builder可以防止这种情况发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.