稍微使用一点Linq应该就可以了。如果使用了一个int
列表:
var zips = new[] { 10433, 30549, 10456, 54933, 60594, 30569, 30659 };
var results = zips.GroupBy(z => z / 100).Select(g => g.First());
或者,如果使用字符串列表:
var zips = new[] { "10433", "30549", "10456", "54933", "60594", "30569", "30659" };
var results = zips.GroupBy(z => z.Remove(3)).Select(g => g.First());
另一种解决方案是使用自定义的
IEqualityComparer<T>
。对于
int
类型:
class ZipComparer : IEqualityComparer<int> {
public bool Equals(int x, int y) {
return x / 100 == y / 100;
}
public int GetHashCode(int x) {
return x / 100;
}
}
对于 字符串
:
class ZipComparer : IEqualityComparer<string> {
public bool Equals(string x, string y) {
return x.Remove(3) == y.Remove(3);
}
public int GetHashCode(string x) {
return x.Remove(3).GetHashCode();
}
}
然后,要使用它,您只需调用 Distinct
即可:
var result = zips.Distinct(new ZipComparer());
最后,您还可以使用MoreLINQ的DistinctBy
扩展方法(也可在NuGet上获取):
var results = zips.DistinctBy(z => z / 100)
// or
var results = zips.DistinctBy(z => z.Remove(3))