2017-04-16 16 views
1

この要素に最も近い値の範囲を検索したい。 要素間のデルタ値。そしてそれはそのモジュラスのために正の数になります。配列の各要素の最も近い値を見つける方法は?

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

答えて

2

配列を昇順でソートするだけで、現在の要素の前と次の要素の最小の差異が問題を解決します。最後の要素については、前の要素の違いを見ることができます。

1

は、以下を経由して、LINQと1行でそれを行うことができるようになります。

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であるため)であるため、の第2の項目を取得します。

ソートされたリストは[43, 30, 20, 3, 100, 140]

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

この答えはあなたを助ける持っている場合は、私の答えを投票してください!

+1

もちろんSeanですが、私はちょうど始めて、upvoteするのに十分な派遣人ではありません;) – ldn

+0

私の答えを正しいものとしてマークすることができます。あなたはダウンとupvoteの下のフックをクリックする必要があります。 –

+0

あなたは新しいので、この小さなツアーをする必要があります。 stackoverflowを少し良く理解するのに役立ちます。 http://stackoverflow.com/tourツアーを済ませたら、あなたはリットーなものを手に入れることができます。このツアーには3分しかかかりません。 –

関連する問題