Если вы можете использовать синтаксис SQL - скажем, если вы используете LINQ для доступа к полям структуры или массива или напрямую обращаетесь к базе данных с таблицей «Алфавит» только с одним полем «Письмо», вы может адаптировать следующий код:
SELECT A.Letter, B.Letter, C.Letter
FROM Alphabet AS A, Alphabet AS B, Alphabet AS C
WHERE A.Letter<>B.Letter AND A.Letter<>C.Letter AND B.Letter<>C.Letter
AND A.Letter<B.Letter AND B.Letter<C.Letter
Это вернет все комбинации из 3 букв, несмотря на то, сколько букв у вас в таблице «Алфавит» (это может быть 3, 8, 10, 27 и т. д.). .
Если все, что вы хотите, это все перестановки, а не комбинации (т. е. вы хотите, чтобы «ACB» и «ABC» считались разными, а не отображались только один раз) просто удалите последнюю строку (AND ) и это сделано.
Post-Edit: после повторного чтения вопроса я понимаю, что необходим алгоритм general , а не только определенный для случая выбора 3 Предметы. Ответ Адама Хьюза - полный, к сожалению, я не могу его проголосовать (пока). Этот ответ прост, но работает только тогда, когда вы хотите точно 3 элемента.
I для одного использования пользовательские утверждения. Есть две основные причины:
равно
в методе тестирования может не совпадать со значением для производственного кода; Если вы тестируете возвращаемое значение метода или функции, которая возвращает объект значения (скажем, значение валюты, кортеж или карту), тогда имеет смысл проверить, что объект результата равен объекту ожидаемого результата. В этом случае стандартная реализация equals должна делать то, что вы хотите.
Между тем, если вы вызываете мутатор для некоторого объекта, а затем проверяете, что он изменил объект, как ожидалось, я думаю, что было бы разумнее проверять только те свойства объектов, которые следовало изменить. Это избавляет вас от необходимости делать собственное определение равных, которое в любом случае скрывает то, что вы ожидали от теста.
Я не думаю, что этот вопрос имеет какое-либо отношение к стандартному способу работы. Это вопрос размышлений о том, что должен тестировать ваш тест.
Если вы хотите проверить, что все свойства равны, заявите равенство всех свойств.
Если вы хотите проверить возвращаемое значение метод Equals
всего объекта, вместо этого утверждать это.