【问题标题】:Sorting a jagged array in C# by multiple columns在 C# 中按多列对锯齿状数组进行排序
【发布时间】:2017-03-14 17:00:58
【问题描述】:

我知道有很多问题和答案,但都不适用于我的问题。我有一个锯齿状数组,我想按数组 b、c 和 d 中的值排序:

string[][] toBeSorted = new string[][] { a, b, c, d, e, f, g, h, i, j};

这仅按“行”排序

toBeSorted = toBeSorted.OrderBy(inner => inner[2]).ToArray();

我尝试过Array.Sort(c.ToArray(), b) 和类似的方法,但在多值排序的情况下它们混合了整个选择

所以现在当我在 toBeSorted 中拥有像“John”、“Smith”、“New York”等值时。 我想让我的数组按“城市”、“姓氏”排序,例如最后按数组g 中的值排序。所以值是 a = 名称,b = 姓氏等。

在我的场景中,我依赖于 .NET 3.5。

谢谢。

【问题讨论】:

  • 您能提供一些示例吗?是否要对 bcd 数组中的值进行排序?
  • 您的问题不是很清楚 - 在您的示例中,“John”和“Smith”是两个不同的数组?当数组中只有字符串时,按姓氏排序是什么意思?
  • 每个数组都代表一些数据,这些数据应该位于具有属性的类中。是这样吗?
  • 嗨@DmitryBychenko,可以这样做,但问题是我想将其他相关值“链接”在一起。因此,如果我对 b、c、d 数组进行排序,来自 a、e、f、g、h、i 和 j 的其他值也会重新排列 - 但只有 b、c、d 需要排序。
  • @GiladGreen,可能是一种方法,是的。

标签: c# .net arrays sorting


【解决方案1】:

不要使用string[][],其中内部数组中的每个项目实际上代表不同的数据“标签”,而是创建一个适当的类,其属性是那些“标签”:

public class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
}

然后:

var people = new List<Person>
{
    new Person { Name = "A", LastName = "1", City = "B" },
    new Person { Name = "B", LastName = "3", City = "B" },
    new Person { Name = "C", LastName = "2", City = "B" },
};

//Linq OrderBy:
var result = people.OrderBy(p => p.LastName);

//List Sort:
people.Sort((x, y) => string.Compare(x.LastName, y.LastName));

【讨论】:

  • 完美,非常感谢 - 我的最后一个问题是(有点奇怪) - 我现在如何从排序的 var 中提取值?来自result 变量?
  • @baron - 提取结果是什么意思?它是一个集合,因此您可以对其进行迭代
  • 作为我想做的例子:foreach (var i in result) { objWriter.WriteLine(i.LastName);} ..输出文件中没有写入任何内容。
  • 这与写入文件本身有关,您丢失了一些东西。如果你只是 foreach 并打印到 Console 你会发现它很好
  • 非常感谢所有的帮助 ;) ..我会更深入地研究它。
【解决方案2】:

按照@GiladGreen 的回答,您可以在不创建新类的情况下使用匿名类型(假设数据格式一致)来实现相同的目的:

var people= toBeSorted.select (p => new {Name = p[0], LastName = p[1], City = p[2]});

var sorted = people.OrderBy(p => p.LastName);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2023-01-10
    • 2016-08-08
    • 2020-12-31
    • 1970-01-01
    • 2020-12-21
    • 2011-10-09
    相关资源
    最近更新 更多