我知道有很多问题和答案,但都不适用于我的问题。我有一个锯齿状的数组,我想根据数组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依赖于我的场景。
谢谢。
答案 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;
}