【问题标题】:Show sublist value from index C#显示索引 C# 中的子列表值
【发布时间】:2017-01-26 05:37:59
【问题描述】:

我的问题是我有 M 个子问题。每个子问题包括 x(双数组)和降低的成本,每次迭代 m 具有不同的值。我想显示在所有子问题中具有最小降低成本的 x。这是我的课:

public class Subproblem
{
    public double[,] x { get; set; }
    public double ReducedCost { get; set; }
}

到目前为止,我已经可以得到它的最低减少成本和索引。现在我想显示该索引上的 x 值(双数组)。我有这样的代码:

var sub = new List<Subproblem>();
for (int m = 0; m < M; ++m)
{
Subproblem s = new Subproblem();
s.x = new double[DC1, DC1];      
s.ReducedCost = model.ObjVal;
    for (int i = 0; i < DC1; ++i)
    {
        for (int j = 0; j < DC1; ++j)
        {
            s.x[i, j] = x[i, j].X;
        }
    }
    sub.Add(s);
}
double minRC = sub.Min(a => a.ReducedCost);
int minRCIndex = sub.FindIndex((i) => i.ReducedCost == minRC);
Console.WriteLine(sub.x(minRCIndex));

最后一行(Console.WriteLine(sub.x(minRCIndex));)还是有红色下划线,不知道怎么写

【问题讨论】:

  • Console.WriteLine(sub.x[minRCIndex]);
  • @rraszewski,sub 是一个List,不包含x
  • 您的sub 只是m 次引用同一对象的列表

标签: c# list indexof


【解决方案1】:

如果您只是想获得您应该做的最低缩减成本子问题:

Subproblem minimumReducedCostedSubproblem = sub[minRCIndex];

你可以像这样打印矩阵:

for (int i = 0; i < DC1; ++i)
{
    for (int j = 0; j < DC1; ++j)
    {
        Console.Write(minimumReducedCostedSubproblem.x[i, j] + "\t");
    }
    Console.Write("\n");
}

但你似乎有点困惑。您正在将一个子问题推送到您的 sub 列表中,其中 M 次具有相同的对象。因为model.ObjVal 在第一个for 循环中不会改变。那里也发生了一些奇怪的事情。

【讨论】:

  • 我的问题是我有 M 个子问题。每个子问题都是一个列表,其中包括 x(双数组)和减少的成本,每次迭代 m 具有不同的值。我想显示在所有子问题中具有最小降低成本的 x。到目前为止,我已经可以找到它的最小降低成本和指数。现在我想在那个索引上显示 x
  • 您打算如何展示xx 是一个矩阵,您需要一个自定义编写器才能对其进行控制台编写。这就是你想要的吗?
  • 是的,实际上就是这样,但现在我只想展示它的价值。 Chetan 已经知道我想要什么
【解决方案2】:

应该是

var objWithMinReduceCost = sub[minRCIndex];
//Now you have the object of Subproblem derived from your logic.
//You can access x property of it have further logic to process it.
for (int i = 0; i < DC1; ++i)
{
    for (int j = 0; j < DC1; ++j)
    {
         Console.WriteLine(objWithMinReduceCost.x[i, j]);
    }
}

【讨论】:

  • 由于sub.x 是一个双重数组,minRCIndex 处的元素将再次成为一个数组。因此,此语句不会给出值。会吗?
  • 不清楚 DC1 的值是多少。所以不确定最终 sub.x [] 中作为下一个索引传递的值应该是什么。所以只是为了指导作者如何访问它,我把 0 作为第二个索引。此外,rraszewski 的答案现在与我的不同。
  • sub 是一个List 并且不包含x,所以这甚至不会编译。
  • 知道了...完全错过了..我现在更正了我的答案。
  • @ArlitaNurmayaAsri,我仍然建议您在我的回答中使用该方法。与其获取索引然后访问该索引,不如立即获取元素?使用First,你的代码会少一些复杂。
【解决方案3】:

如果您有兴趣获取double 数组,您可以这样做:

double[,] result = sub.First(i => i.ReducedCost == minRC).x;

尽管正如 Tolga 所提到的,您的所有元素都将具有与您当前代码相同的 ReducedCost

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多