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

问题描述:

我想找到这个元素的最接近值之间的范围。 元素之间的增量值。这将是正数,因为它的模数。如何找到数组中每个元素的最近值?

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;

+1

你有没有想过对数组进行排序? –

+1

@ Sidias-Korrado不,我从来没有使用过它 – ldn

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

应通过以下能够与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)

因此,排序的名单应该是[43, 30, 20, 3, 100, 140]

我不知道,我是否理解你的问题的权利。如果我有,然后将下面的代码片段可以帮助你:

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

如果这个答案有帮助你,请投我的答案!

+1

当然是肖恩,但我刚刚开始,没有足够的repts upvote;) – ldn

+0

你可以标记我的答案是正确的。你只需要点击下方和上方的钩子。 –

+0

因为你是新人,你应该做这个小游览。它会帮助你更好地理解stackoverflow。 http://stackoverflow.com/tour,你将会在你完成游览后赚取一些东西。你只需要3分钟就可以完成这次巡演。 –