У меня проблема с комбинацией. То, что я получил, это Data
класса, который в основном имеет name
и список values
:Получить все Сочетание предметов
public abstract class DataField : IDataField
{
public string Name { get; set; }
public List<string> Values { get; set; }
}
Во время выполнения, что я пытаюсь сделать, это получить все возможные комбинации из List<DataField>
объекта. То, что я пытался до сих пор:
// Get dataFields with values
List<IDataField> propertyDataFields = mDataFields.Where(x => x.Values.Count > 0).ToList();
var props = GetPropertiesList(propertyDataFields, 0, propertyDataFields.Count - 1, new List<List<FieldProperties>>());
private static List<List<FieldProperties>> GetPropertiesList(List<IDataField> propertyDataFields, int listPosition, int position, List<List<FieldProperties>> fieldPropertiesList)
{
var fieldProperties = new List<FieldProperties>();
foreach (var item in propertyDataFields[position].Values)
{
if (position == -1)
{
GetPropertiesList(propertyDataFields, listPosition + 1, propertyDataFields.Count - 1, fieldPropertiesList);
}
fieldProperties.Add(new FieldProperties(propertyDataFields[position].Name, item));
GetProperties(propertyDataFields, position - 1, fieldProperties, fieldPropertiesList);
}
return fieldPropertiesList;
}
private static void GetProperties(List<IDataField> propertyDataFields, int position, List<FieldProperties> fieldProperties, List<List<FieldProperties>> fieldPropertiesList)
{
if (position == -1)
{
fieldPropertiesList.Add(fieldProperties);
}
foreach (var item in propertyDataFields[position].Values)
{
fieldProperties.Add(new FieldProperties(propertyDataFields[position].Name, item));
GetProperties(propertyDataFields, position - 1, fieldProperties, fieldPropertiesList);
}
}
В конце я нужен список списков FieldProperties
объектов. Идея состояла в том, чтобы начать с последнего dataField
в списке и пропустить все остальные с использованием foreach
каждый раз, но это не сработает, если в первом списке есть только запись 1
. Возможно сортировка по Values
. Count
- идея?
Редактировать: FieldProperties
- это класс из другой библиотеки dll im. Мне нужно создать экземпляр для каждого DataField.Value.
Szenario is: Я получил List<IDataField>
, например.
и я хочу, чтобы создать List<List<FieldProperties>>
со всеми возможными комбинациями значений DataField.
Вы можете добавить пример ввода, и это соответствие вывод? – Maarten
Что такое 'FieldProperties'? Каково ваше * актуальное * требование здесь? Я имею в виду, кажется, что это ужасное техническое решение для какой-то проблемы с готовностью, если честно. – MarioDS
Итак, вы хотите, чтобы объекты '' DataField' 'менялись, в соответствии с которыми авторы находятся в списке значений? Итак, вы должны были бы: «1,2,3',' 1,2', '1,3',' 2,3', '1',' 2' и '3' в поле« Значения »? Это похоже на очень странную вещь, которую нужно хотеть, поэтому просто хочу убедиться, что я правильно понимаю. Также я был бы склонен к MarioDS, что это немного похоже на плохое решение другой проблемы ... – Chris