如何找到数组中每个元素的最近值?

时间:2017-04-16 20:09:19

标签: c# arrays list

我想找到这个元素的最接近值之间的范围。 元素之间的Delta值。并且它将是正数,因为它的模数。

class Element {


double DeltaValue;


double ElementValue;


public Element(double n) {

ElementValue = n;

}

static void Main() {


list<Element> ListElements = new list<Elements>;


ListElements.Add(3);

ListElements.Add(10);

ListElements.Add(43);

ListElements.Add(100);

ListElements.Add(30);

ListElements.Add(140);

for(int i = 0; i < ListElements.Count; i++) { 

ListElements[i].DeltaValue = //and problem is here 


//example as for ListElements[2].DeltaValue will be 13; because 43-30=13;

} 

//例如ListElements [2] .DeltaValue将为13;因为43-30 = 13;

3 个答案:

答案 0 :(得分:2)

只需按顺序对数组进行排序,当前元素的上一个元素和下一个元素之间的最小差异将解决您的问题。这里是最后一个元素,你可以看一下它之前元素的区别。

答案 1 :(得分:1)

应该能够通过以下方式与linq在一行中完成:

public static int GetClosestVal(this int[] values, int place)
{
    return values.OrderBy(v => Math.Abs(v - values[place])).ToArray()[1];
}

以下输出30

var testArray = new [] {3, 10, 43, 100, 30, 140};
Console.Write(testArray.GetClosestVal(2));

基本上,你按每个项目和所选项目之间的绝对差异排序,然后抓住列表中的第二个项目,因为第一个项目始终是项目本身(因为nn = 0)< / p>

因此,排序列表应为[43, 30, 20, 3, 100, 140]

答案 2 :(得分:0)

我不确定,我是否理解你的问题。如果我有,那么以下代码段可以帮助您:

class Program
{
    static void Main(string[] args)
    {
        Elements ListElements = new Elements();

        ListElements.ElementValue.Add(3);

        ListElements.ElementValue.Add(10);

        ListElements.ElementValue.Add(43);

        ListElements.ElementValue.Add(100);

        ListElements.ElementValue.Add(30);

        ListElements.ElementValue.Add(140);


        ListElements.CreateDeltaValues();


        for (int i = 0; i < ListElements.DeltaValue.Count; i++)
        {

            Console.WriteLine("ListElement["+i+"]: " + ListElements.DeltaValue[i]);


            //example as for ListElements[2].DeltaValue will be 13; because 43-30=13;

        }
        Console.ReadKey();
    }
}

public class Elements
{
    public List<double> DeltaValue = new List<double>();
    public List<double> ElementValue = new List<double>();

    public void CreateDeltaValues()
    {
        this.ElementValue.Sort();

        for (int i = 1; i < this.ElementValue.Count; i++)
        {
            var deltaValue = this.ElementValue[i] - this.ElementValue[i-1];
            this.DeltaValue.Add(deltaValue);
        }
    }
}

这是一个控制台应用程序,但此代码也适用于其他应用程序模型。

此代码生成以下输出:

enter image description here