C# 如何对二维字符串数组进行排序并将其指定给标签 新列表=新列表(); for(int i=0;iitem[1])。选择(item=>string.Join(“,item))事实上,使用StringBuilder来完成整个过程可能会稍微高效一些,因此您确实是对的。:) list.OrderBy(arr => arr[1]).ToList() 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();

C# 如何对二维字符串数组进行排序并将其指定给标签 新列表=新列表(); for(int i=0;iitem[1])。选择(item=>string.Join(“,item))事实上,使用StringBuilder来完成整个过程可能会稍微高效一些,因此您确实是对的。:) list.OrderBy(arr => arr[1]).ToList() 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();,c#,arrays,C#,Arrays,如何根据str2值对列表进行排序,然后将密钥对值分配给标签。对于您拥有的linq: 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].Quick

如何根据str2值对列表进行排序,然后将密钥对值分配给标签。

对于您拥有的linq:

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";;
}
然后你可以做:

var sorted = list.OrderBy(item => item[1]);

假设您不需要将
列表
用于任何其他目的,我们只需在一个循环中按我们想要的顺序迭代
contentList
(这种方法的好处是可以更清楚地了解如何对数据进行排序)


注意:使用
StringBuilder
实现进行更新,并且只为
Label1.Text指定了一个赋值。最简单的方法是使用LINQ:

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();

抱歉,无法测试它,因为我正在用手机应答。

您可以使用sring.Concat,它有一个重载,可以接受IEnumerable

list.OrderBy(arr => arr[1]).ToList()
试一试


注意:字符串生成器非常方便,因为字符串是不可变的,并且不小心在字符串上使用
+
运算符每次都会创建一个新字符串。字符串生成器阻止这种情况发生。

list.OrderBy(x=>x[1])
?但是如果您只有并且总是有两个,那么
列表
可能更有意义。我会避免重复更新那样的UI元素。更好的方法是使用
StringBuilder
,然后在循环后分配
Label1.Text
,但是这更容易输入,而且能让人明白这一点。OP可能只是复制你的代码,所以最好警告他们不要这样做。请看。@MatthewWatson更新为使用
StringBuilder
和单个标签赋值:)简短而简单。谢谢。这里也有同样的评论:不要循环向
控件.text
属性追加文本。每次迭代都会发送一条windows消息!。。。是的,在实际程序中,我会使用StreamBuilder,这只是对用户示例的更正。或者您甚至可以使用类似
Label1.Text=string.Join(“\r\n”,list.OrderBy(item=>item[1])。选择(item=>string.Join(“,item))事实上,使用StringBuilder来完成整个过程可能会稍微高效一些,因此您确实是对的。:)
list.OrderBy(arr => arr[1]).ToList()
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();