获取所有项目组合

用户名

我遇到了组合问题。我得到的是一个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条目,则此方法将无效也许按排序ValuesCount是个主意吗?

编辑:FieldProperties是从另一个dll即时通讯使用的类。我需要为每个DataField.Value创建一个实例。

该SZENARIO是:我有一个List<IDataField>

  var dataFieldAuthor = new DataField() {
  Name = "Author"
  Values = new List<string> { "Author1", "Author2", "Author3" };
  }

我想List<List<FieldProperties>>用DataField值的所有可能组合创建一个

伊万·斯托夫(Ivan Stoev)

您可以从我的答案中使用泛型方法,该答案如何遍历具有不同长度的列表以查找所有排列?

public static class Algorithms
{
    public static IEnumerable<T[]> GenerateCombinations<T>(this IReadOnlyList<IReadOnlyList<T>> input)
    {
        var result = new T[input.Count];
        var indices = new int[input.Count];
        for (int pos = 0, index = 0; ;)
        {
            for (; pos < result.Length; pos++, index = 0)
            {
                indices[pos] = index;
                result[pos] = input[pos][index];
            }
            yield return result;
            do
            {
                if (pos == 0) yield break;
                index = indices[--pos] + 1;
            }
            while (index >= input[pos].Count);
        }
    }
}

结合简单的LINQ:

var fields = mDataFields.Where(x => x.Values.Count > 0).ToList();
var result = fields
    .Select(df => df.Values).ToList()
    .GenerateCombinations()
    .Select(c => c.Select((v, i) => new FieldProperties(fields[i].Name, v)).ToList())
    .ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取所有组合

来自分类Dev

获取数组的所有组合

来自分类Dev

获取所有术语组合

来自分类Dev

获取列表中项目的所有组合,同时禁止某些项目在一起

来自分类Dev

组合框显示所有项目

来自分类Dev

获取所有ListView项目?

来自分类Dev

获取有向图组合的所有组合

来自分类Dev

获取任何长度的所有组合,没有子组合

来自分类Dev

获取元素的所有可能组合

来自分类Dev

SQLAlchemy获取列组合的所有行

来自分类Dev

获取N个物品的所有组合

来自分类Dev

获取数组中元素的所有组合

来自分类Dev

SQL获取所有与事件交集的组合

来自分类Dev

Python:获取投资组合的权重的所有可能组合

来自分类Dev

动态获取数组所有元素的所有组合

来自分类Dev

根据模式的所有字母组合(n个项目)

来自分类Dev

删除所有项目后的组合框大小问题

来自分类Dev

删除所有项目后无法单击组合框

来自分类Dev

插入输入项目的所有组合的最佳方法

来自分类Dev

PHP - 生成数组中项目的所有组合

来自分类Dev

从ListView Android获取所有选中的项目

来自分类Dev

获取类别及其子项的所有项目

来自分类Dev

如何获取数组中的所有项目?

来自分类Dev

从podio api获取所有项目

来自分类Dev

获取所有项目的类别?

来自分类Dev

无法获取所有组项目

来自分类Dev

获取NotesXSPDocument中的所有项目

来自分类Dev

从ListView Android获取所有选中的项目

来自分类Dev

获取所有选定的项目-<mx:CheckBox