【问题标题】:Use loop to initialize multiple objects使用循环初始化多个对象
【发布时间】:2014-07-10 19:29:36
【问题描述】:

我正在尝试在包含 58 个属性的 promoters data 上构建 ID3 算法。我怎样才能不初始化每个单个属性,而是使用循环(例如 for 或 foreach)来初始化所有属性?

基本上,我不想做下面的事情,而是想用一个循环来做,但我不能在卷发内使用一个循环

var splits = line.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

        var name = splits[1];
        var data = splits[2].Trim();
        string[] array = null;
        for (int i = 0; i < data.Length; i++)
        {
            array[i]= data.ToCharArray().GetValue(i).ToString();
        }

        return new Instance
        {
            Output = new Output(splits[0], "Result"),
            Features = new List<Feature>
                                  {
                                  new Feature(array[0], "1"),
                                  new Feature(array[1], "2"),
                                  new Feature(array[2], "3"),
                                  new Feature(array[3], "4"),
                                  //and so on for all atributes
                                  }
        };

【问题讨论】:

    标签: c# algorithm decision-tree id3


    【解决方案1】:

    你可以这样做:

    Features = Enumerable.Range(1, 58)
                .Select(x => new Feature(array[x - 1], x.ToString()))
                .ToList()
    

    【讨论】:

    • 这看起来不错,但是最后一行 .ToList() 出现错误
    • 可能是因为你没有包含命名空间using System.Linq;
    • Feature 不包含“ToList”的定义,然后我尝试添加 who select '.ToString()' 然后 '.ToList()' 但后来我得到无法转换类型错误跨度>
    • @rikket 你确定你把ToList放在了正确的地方吗?
    • @benAaronson 是的 afaik,我做的和 Selman22 发布的完全一样
    【解决方案2】:

    另一个答案很好,对于此类情况,您绝对应该熟悉 LINQ。但是,如果您想了解如何使用您已经熟悉的语言功能轻松完成此操作,您可以这样做:

    var features = new List<Feature>();
    for(int i = 0; i < 58; i++)
    {
        features.Add(new Feature(array[i], (i+1).ToString()));
    }
    

    然后你会在创建 Instance 时分配它:

    return new Instance
    {
        Output = new Output(splits[0], "Result"),
        Features = features
    };
    

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 2022-12-18
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2019-09-23
      相关资源
      最近更新 更多