如何对二维字符串数组进行排序并将其分配给标签

时间:2016-02-19 18:41:24

标签: c# arrays

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值对列表进行排序,然后将键对值分配给标签。

5 个答案:

答案 0 :(得分:5)

为此你有linq:

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

然后你可以这样做:

foreach(var item in sorted)
    Label1.Text += item[0] + " " + item[1] + "\r\n"; //forgot the "+"

答案 1 :(得分:2)

假设你确实需要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的一项作业。

答案 2 :(得分:1)

最简单的方法是使用LINQ:

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

抱歉,我无法通过手机接听来测试它。

答案 3 :(得分:1)

你可以使用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);

答案 4 :(得分:1)

尝试

    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非常方便,因为字符串是不可变的,并且在字符串上使用+运算符不小心每次都会创建一个新字符串。 String Builder可以防止这种情况发生。