본문 바로가기
이미지 매크로

C# .NET 매크로 프로그램 만들기. (배열 정렬하기 2부)

by 업무자동화 2024. 5. 30.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #엔지엠에디터 #엔지엠플레이어 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화

 

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 오늘은 배열 정렬하기 2부입니다. 앞서 1부에서 오름차순과 내림차순 그리고, 역순과 랜덤을 알아봤는데요. 오늘은 특정 값에서 가깝거나 먼 순서로 정렬하는 방법을 추가 개발 해볼께요. 우선, 이전에 개발했던 배열 정렬 모델을 열고, Far와 Near의 case에 코딩을 해줘야 합니다.

 

아래와 같이 정렬 방법을 Far, Near로 선택하면 기준이 되는 값들이 필요합니다.

 

 

정렬 방법의 기준 값들은 아래와 같이 속성으로 제공해줍니다.

[LocalizedCategory("SortOption")]
[LocalizedDisplayName("NearFarPoint")]
[LocalizedDescription("NearFarPoint")]
[Browsable(true)]
[DefaultValue(typeof(Point), "0, 0")]
[Editor(typeof(TypeEditor.MouseTrackingEditor), typeof(System.Drawing.Design.UITypeEditor))]
public Point NearFarPoint { get; set; }

[LocalizedCategory("SortOption")]
[LocalizedDisplayName("NearFarSize")]
[LocalizedDescription("NearFarSize")]
[Browsable(true)]
[DefaultValue(typeof(Size), "0, 0")]
public Size NearFarSize { get; set; }

[LocalizedCategory("SortOption")]
[LocalizedDisplayName("NearFarRectangle")]
[LocalizedDescription("NearFarRectangle")]
[Browsable(true)]
[DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle NearFarRectangle { get; set; }

[LocalizedCategory("SortOption")]
[LocalizedDisplayName("NearFarText")]
[LocalizedDescription("NearFarText")]
[Browsable(true)]
[DefaultValue(null)]
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string? NearFarText { get; set; }

[LocalizedCategory("SortOption")]
[LocalizedDisplayName("NearFarNumber")]
[LocalizedDescription("NearFarNumber")]
[Browsable(true)]
[DefaultValue(null)]
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public double? NearFarNumber { get; set; }

 

이전 시간에 만든 텍스트 유사도를 이용하면 텍스트의 경우에는 쉽게 특정 값과 얼마나 유사한지에 따라서 정렬할 수 있습니다. 이 내용을 만들기 위해서 배열 강좌를 하다가 중간에 텍스트 유사도와 관련된 액션을 먼저 개발했습니다. 아무래도 코드를 재사용하는게 좋으니까요.

case Definition.Sort.Far:
    Dictionary<double, string> keyValuePairs = new Dictionary<double, string>();
    var similaity = new TextSimilarityCheckModel();
    similaity.LeftValue = NearFarText;

    foreach (var arr in arrText)
    {
        similaity.RightValue = arr;
        similaity.Execute(player);
        keyValuePairs.Add(similaity.MatchRateResult, arr);
    }

    Result = keyValuePairs.OrderBy(o => o.Key).Select(s => s.Value).ToArray();
    break;
case Definition.Sort.Near:
    keyValuePairs = new Dictionary<double, string>();
    similaity = new TextSimilarityCheckModel();
    similaity.LeftValue = NearFarText;

    foreach (var arr in arrText)
    {
        similaity.RightValue = arr;
        similaity.Execute(player);
        keyValuePairs.Add(similaity.MatchRateResult, arr);
    }

    Result = keyValuePairs.OrderByDescending(o => o.Key).Select(s => s.Value).ToArray();
    break;

 

숫자는 아래와 같이 정렬할 수 있습니다. 람다식을 이용하면 아래와 같이 처리할 수 있습니다. 텍스트보다는 훨씬 간단하죠?

case Definition.Sort.Far:
    Result = arrNumber.OrderByDescending(i => Math.Abs((decimal)(i - NearFarNumber)))
                 .ThenBy(i => i < NearFarNumber)
                 .Select(s => s.ToString())
                 .ToArray();
    break;
case Definition.Sort.Near:
    Result = arrNumber.OrderBy(i => Math.Abs((decimal)(i - NearFarNumber)))
                 .ThenBy(i => i < NearFarNumber)
                 .Select(s => s.ToString())
                 .ToArray();
    break;

 

이제 응용 부분입니다. 위에서 숫자를 특정 숫자와 비교해서 가깝거나 먼 순서로 배치하는걸 배웠습니다. 그러면, 쉽게 응용해서 좌표와 크기 그리고, 사각형까지 모두 개발할 수 있습니다. 어차피 좌표의 X와 Y도 숫자고 크기의 Width와 Height도 숫자이기 때문입니다. 그리고, 사각형의 경우에는 크기와 좌표를 모두 가지고 있기 때문에 지금까지 만든 내용을 모두 합쳐주면 됩니다.

 

특정 값과 가깝거나 먼 순서로 정렬하는 기능이 필요한지는 잘 모르겠습니다. 그리고, 어디에 어떻게 사용될지도요. 일반적으로 개발 방법론에서 말하는 하지 말아야 할 개발들이 있는데요. 요구 사항이 없는데 미리 예상해서 이것저것 덕지덕지 개발하는걸 우려하고 있습니다. 어떻게 보면 Near, Far 정렬도 그런축에 낄 수 있을지도 모르겠네요. 하지만, 크게 시간이나 노력이 들어가는건 아니라서 일단 미리 구현을 해두었습니다. 그리고, 엔지엠 6 버전에도 있는 기능이라서 빼기는 좀 그렇더라고요^^;

 

이제 테스트를 해볼텐데요. 아래 동영상을 참고해서 다양한 케이스를 테스트 해보세요.

https://youtu.be/6cQmkaif_CA

 

 

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

 

반응형

댓글