在C#中按多列排序锯齿状数组

时间:2016-11-01 14:24:21

标签: c# .net arrays sorting

我知道有很多问题和答案,但都不适用于我的问题。我有一个锯齿状的数组,我想根据数组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中拥有像“约翰”,“史密斯”,“纽约”等的价值观时。 我希望我的数组按“城市”,“姓氏”排序,例如最后按数组g中的值排序。所以这些值是a = names,b =姓氏等。

我的.NET 3.5依赖于我的场景。

谢谢。

2 个答案:

答案 0 :(得分:4)

而不是使用内部数组中的每个项实际代表数据的不同“标记”的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));

答案 1 :(得分:3)

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

For Eg:
John -Correct
John123-Incorrect
John 123 - Incorrect
John Micheal -it shows incorrect as its have whitespace . How to fix it?



 -(BOOL)validateNameWithString:(NSString*)nameStr
    {
        NSString *nameRegex = @"^[a-zA-Z]*$";

        NSPredicate *testRegex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex];
        if(![testRegex evaluateWithObject:nameStr])
            return NO;
        else
            return YES;

    }