Linq哪里独特

时间:2018-08-21 15:19:41

标签: c# linq

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()。

1 个答案:

答案 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());
}