C# 排序地址列表
我已经创建了一个包含许多地址的列表。我想对列表进行排序,以便它们按数字顺序显示,即C# 排序地址列表,c#,asp.net,linq,C#,Asp.net,Linq,我已经创建了一个包含许多地址的列表。我想对列表进行排序,以便它们按数字顺序显示,即 1 Abbey Road 2 Abbey Road 3 Abbey Road 10 Abbey Road 我试过list.sort,它是按字母顺序排列的,因此10出现在2之前 我的linq是有限的,所以我想可能有一种方法可以使用它或使用正则表达式 有什么想法吗?您可以使用Linq的OrderBy()排序: 其中,street是带有街道名称的字符串,comparer是一个IComparer,可以按照您想要的方式
1 Abbey Road
2 Abbey Road
3 Abbey Road
10 Abbey Road
我试过list.sort,它是按字母顺序排列的,因此10出现在2之前
我的linq是有限的,所以我想可能有一种方法可以使用它或使用正则表达式
有什么想法吗?您可以使用Linq的
OrderBy
()排序:
其中,street
是带有街道名称的字符串,comparer
是一个IComparer
,可以按照您想要的方式对它们进行排序。要对字符串进行数字排序,您可以查看以下内容:
试试这个:-
var sortedList = addr.OrderBy(x => x.ID).ToList();
如果您希望按排序方法对其进行排序,则需要实现接口:-
public class Address : IComparable<Address>
{
public int ID { get; set; }
public string Add { get; set; }
public int CompareTo(Address other)
{
return this.ID.CompareTo(other.ID);
}
}
.如果您不将街道编号存储在单独的字段中,但希望它位于第一个位置,则可以使用具有有意义属性的此类来提取所有信息:
public class Address
{
public string FullAddress { get; set; }
public int Number { get; set; }
public string Street { get; set; }
}
现在基本上只需使用String.Split
和int.Parse
,例如在这个LINQ查询中:
List<Address> addresses = strings.Select(s => new {
FullAddress = s.Trim(),
Tokens = s.Trim().Split()
})
.Where(x => x.Tokens.Length > 1 && x.Tokens[0].All(Char.IsDigit))
.Select(x => new Address {
FullAddress = x.FullAddress,
Street = String.Join(" ", x.Tokens.Skip(1)),
Number = int.Parse(x.Tokens[0])
})
.OrderBy(addr => addr.Number)
.ToList();
请注意,Where
过滤,因此跳过“无效”地址。如果不希望这样,您可以使用:
int number;
List<Address> addresses = strings.Select(s => new {
FullAddress = s.Trim(),
Tokens = s.Trim().Split()
})
.Select(x => new Address{
FullAddress = x.FullAddress,
Street = String.Join(" ", x.Tokens.Skip(1)),
Number = int.TryParse(x.Tokens[0], out number) ? number : int.MaxValue
})
.OrderBy(addr => addr.Number)
.ToList();
整数;
列表地址=字符串。选择(s=>new{
FullAddress=s.Trim(),
令牌=s.Trim().Split()
})
.选择(x=>新地址{
FullAddress=x.FullAddress,
Street=String.Join(“,x.Tokens.Skip(1)),
Number=int.TryParse(x.Tokens[0],out Number)?Number:int.MaxValue
})
.OrderBy(addr=>addr.Number)
.ToList();
这是单个字段,还是将街道号码存储在单独的字段中?另外,您使用的是哪种LINQ提供程序(LINQ到对象、LINQ到SQL、LINQ到实体)?它是一个字段,只是一个包含整个地址的字符串。我正在使用/导入System.Linq
List<Address> addresses = strings.Select(s => new {
FullAddress = s.Trim(),
Tokens = s.Trim().Split()
})
.Where(x => x.Tokens.Length > 1 && x.Tokens[0].All(Char.IsDigit))
.Select(x => new Address {
FullAddress = x.FullAddress,
Street = String.Join(" ", x.Tokens.Skip(1)),
Number = int.Parse(x.Tokens[0])
})
.OrderBy(addr => addr.Number)
.ToList();
.OrderBy(addr => addr.Number)
.Select(addr => addr.FullAddress)
.ToList();
int number;
List<Address> addresses = strings.Select(s => new {
FullAddress = s.Trim(),
Tokens = s.Trim().Split()
})
.Select(x => new Address{
FullAddress = x.FullAddress,
Street = String.Join(" ", x.Tokens.Skip(1)),
Number = int.TryParse(x.Tokens[0], out number) ? number : int.MaxValue
})
.OrderBy(addr => addr.Number)
.ToList();