Linq方法Distinct
获取IEnumerable中的每个对象之一。
但是,如果我根本不想包含不同的对象该怎么办。
例如,给定
a, 一种, b, C, C, C, d, e
我想要一个方法WhereUnique
,该方法将返回b,d,e,但不会返回a或d,因为它们都出现多次。
显而易见的方法
public static IEnumerable<T> WhereUnique<T>(this IEnumerable<T> items)
{
return items.Where(x => items.Count(y => y == x) <= 1);
}
是O(n ^ 2),我希望有比这更有效的东西。
理想情况下,它应该支持WhereDisqueBy(),类似于DistinctBy()。
答案 0 :(得分:0)
const app = express();
const server = new ApolloServer({
schema: schema,
context: ({ req }) => ({
token: req.headers.authorization,
}),
dataSources: () => apiDataSources,
});
server.applyMiddleware({ app });
app.listen({ port: 4000 }, () => {
console.log("Server is at http://localhost:4000/graphql");
});
性能可能略高
public static IEnumerable<T> WhereUnique<T>(this IEnumerable<T> items)
{
return items.GroupBy(x => x).Where(x => x.Count() ==1).Select(x => x.First());
}
还有WhereUniqueBy
public static IEnumerable<T> WhereUnique<T>(this IEnumerable<T> items)
{
return items.GroupBy(x => x).Where(x => !x.Skip(1).Any()).Select(x => x.First());
}