Предположим, что X
- ваша матрица, мы можем сделать:
ind <- which(upper.tri(X, diag = TRUE), arr.ind = TRUE)
cbind(ind, X[ind])
. В некоторых случаях вам может понадобиться использование тусклых имен. В этом случае мы должны упорядочить результат в кадре данных, так как первые два столбца являются символами, а третий - числовыми.
ind <- which(upper.tri(X, diag = TRUE), arr.ind = TRUE)
nn <- dimnames(X)
data.frame(row = nn[[1]][ind[, 1]],
col = nn[[2]][ind[, 2]],
val = X[ind])
Я понял, что должен использовать .all()
, как в этом примере, чтобы убедиться, что все ингредиенты были в запрашиваемом списке, но, как было упомянуто в комментариях, это не решает проблему без учета регистра:
if (!recipeQuery.getIngredients().isEmpty()) {
Criteria categories = Criteria.where("ingredients").all(recipeQuery.getIngredients());
query.addCriteria(categories);
}
это решает проблему также
if (!recipeQuery.getIngredients().isEmpty()) {
Criteria categories = new Criteria();
categories.andOperator(recipeQuery.getIngredients().stream()
.map(i -> Criteria.where("ingredients").regex(".*" + i + ".*", "i"))
.toArray(Criteria[]::new));
query.addCriteria(categories);
}