LINQ를 활용한 범위 내 숫자 포함 여부 효율적 검사

요구사항:

다음과 같은 범위가 주어졌을 때, 특정 값이 이 범위들 중 하나에 포함되는지 빠르게 확인하는 방법이 필요합니다.

  • 0x0020~0x007F
  • 0x00A0~0x017F
  • 0x01A0~0x01CF
  • 0x01F0~0x01FF
  • 0x0210~0x021F
  • 0x1EA0~0x1EFF

해결 방안

객체 지향 접근 방식 사용

1. 각 범위에 최소값과 최대값을 가지는 클래스 정의


public class RangeInterval
{
    public RangeInterval(int lowerBound, int upperBound)
    {
        LowerBound = lowerBound;
        UpperBound = upperBound;
    }
    
    /// <summary>
    /// 최소값 저장
    /// </summary>
    public int LowerBound { get; set; }

    /// <summary>
    /// 최대값 저장
    /// </summary>
    public int UpperBound { get; set; }
}

2. 데이터 초기화


private static readonly List<RangeInterval> definedIntervals;

static DataValidator()
{
    definedIntervals = new List<RangeInterval>
    {
        new RangeInterval(0x0020, 0x007F),
        new RangeInterval(0x00A0, 0x017F),
        new RangeInterval(0x01A0, 0x01CF),
        new RangeInterval(0x01F0, 0x01FF),
        new RangeInterval(0x0210, 0x021F),
        new RangeInterval(0x1EA0, 0x1EFF)
    };
}

LINQ를 사용한 범위 검증 메서드


/// <summary>
/// 값이 유효한 범위에 속하는지 확인
/// </summary>
/// <param name="targetValue">검사할 값</param>
/// <returns>True: 유효한 범위에 있음, False: 유효한 범위에 없음</returns>
public static bool IsWithinValidRange(int targetValue)
{
    return definedIntervals.Any(interval => 
        targetValue >= interval.LowerBound && 
        targetValue <= interval.UpperBound);
}

메서드 호출 예시


static void Main(string[] args)
{
    while (true)
    {
        Console.Write("16진수 값을 입력하세요: ");
        var userInput = Console.ReadLine();
        
        if (userInput == "q")
        {
            break;
        }
        
        var numericValue = 0;
        var isValidFormat = int.TryParse(userInput.ToUpper(), 
            NumberStyles.AllowHexSpecifier, null, out numericValue);
            
        if (isValidFormat)
        {
            Console.WriteLine("{0}: {1}", 
                userInput, 
                IsWithinValidRange(numericValue) ? "유효한 범위에 속함" : "유효한 범위에 속하지 않음");
        }
        else
        {
            Console.WriteLine("잘못된 입력 형식입니다");
        }
    }
}

태그: LINQ C# 범위 검사 객체 지향 프로그래밍 유효성 검증

7월 18일 01:50에 게시됨