2017-04-16 4 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와 한 줄에 그것을 할 수 있어야한다 :

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]

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 분이 필요합니다. –

관련 문제