如何管理多个增长列表?

时间:2016-01-02 13:34:07

标签: c# .net list min

该计划首先收集游戏中盟军/敌方奴才的数量。

 var eminions = MinionManager.GetMinions(Player.ServerPosition, 1500 MinionTypes.All, MinionTeam.Enemy).ToList();
 var aminions = MinionManager.GetMinions(Player.ServerPosition, 1500, MinionTypes.All, MinionTeam.Ally).ToList();

然后我使用一个函数将列表中找到的每个对象转换为距离:

 emd.Add(eminions[0].ServerPosition.Distance(aminions[i].ServerPosition)); //the count is 5

我们的列表'emd'包含(aminions.Count)距离,在我们的示例中= 5。

emd [0] = 500
emd [1] = 400
emd [2] = 300
emd [3] = 200
emd [5] = 100

这里有些棘手,我们想找出列表中最小距离的位置。如果我们理论化,我们可以看到它的emd [5] = 100.但我怎么得到'5'?

摘要:程序必须找到列表中最小的数字,然后在列表中找到它所在的位置。

这是我尝试过的:我尝试比较每个数字以查看最小的数字,如果是真的,添加到新列表,我面临的问题是我创建了太多的列表而我不准备处理不同数量的奴才。

var eminions = MinionManager.GetMinions(Player.ServerPosition, 1500, MinionTypes.All, MinionTeam.Enemy).ToList();
var aminions = MinionManager.GetMinions(Player.ServerPosition, 1500, MinionTypes.All, MinionTeam.Ally).ToList();
if (eminions.Count > 0 && aminions.Count > 0)
{
    List<double> emd = new List<double>();
    List<bool> bdistance = new List<bool>();
    for (int i = 0; i < aminions.Count; i++)
    {
        emd.Add(eminions[0].ServerPosition.Distance(aminions[i].ServerPosition));

        for (int j = 0; j < aminions.Count; j++)
        {
            if (emd[i] > emd[j])
            {
                bdistance.Add(true);
            }
        }   
    }
}

3 个答案:

答案 0 :(得分:3)

int pos = 0; // set index to zero
int min = emd[0]; // set minimum to first value
for (int i = 1; i < emd.Count; i ++)
{
    var val = emd[i]; // get value from position
    if (val < min) //check if value is smaller then current minimum
    {
        // set minimum to value
        min = val;
        // set minimum pos to current value pos
        pos = i;
    }
}
//found minimum
//minimum index == pos

答案 1 :(得分:2)

这应该有效

int indexMin
    = !emd.Any() ? -1 :
    emd.Select( (value, index) => new { Value = value, Index = index } )
    .Aggregate( (a, b) => (a.Value < b.Value) ? a : b )
    .Index;

1.The emd.Any()? -1:如果列表为空,将强制为-1;

2.Select会将每个int元素投影为具有两个属性的匿名类型:Value和Index;

3. Aggregate将获得具有最小值的元素;

4.最后,我们得到所选元素的索引。

答案 2 :(得分:2)

你可以轻松找到它!

var minIndex = emd.IndexOf(emd.Min());