C# 选择要排列的数字

C# 选择要排列的数字,c#,arrays,C#,Arrays,我无法创建一个文本框,用户可以在其中输入要选择的数字。。例如,10-16,18,22-30(例如,当您选择要打印的页面时)然而,我也有一些字母扔进了它,例如它可能会变成11,11A,12,12A 我如何做到这一点,以便当用户键入了他们想要的数字时,它被传输到一个数组中 我不太擅长解释,所以如果您不理解,很抱歉。没有输入错误检查,并且假设带字母的数字不能定义它的范围 String textInput = "11,11A,12,12A,13-16,18,22-30";

我无法创建一个文本框,用户可以在其中输入要选择的数字。。例如,
10-16,18,22-30
(例如,当您选择要打印的页面时)然而,我也有一些字母扔进了它,例如它可能会变成
11,11A,12,12A

我如何做到这一点,以便当用户键入了他们想要的数字时,它被传输到一个数组中


我不太擅长解释,所以如果您不理解,很抱歉。

没有输入错误检查,并且假设带字母的数字不能定义它的范围

        String textInput = "11,11A,12,12A,13-16,18,22-30";
        String[] strArray = textInput.Split(',');
        List<String> pages = new List<String>();
        foreach (String s in strArray)
        {
            String[] range = s.Split('-');
            if (range.Length == 2)
            {
                int startPage = int.Parse(range[0]);
                int endPage = int.Parse(range[1]);
                for (int i = startPage; i<= endPage; i++)
                {
                    pages.Add(i.ToString());
                    pages.Add(i.ToString()+"A");
                }
            }
            else
            {
                pages.Add(s);
            }
        }

        String[] resultArray = pages.ToArray();

        Console.WriteLine("Input: " + textInput);
        foreach (String s in resultArray)
        {
            Console.WriteLine(s);
        }
String textInput=“11,11A,12,12A,13-16,18,22-30”;
字符串[]strArray=textInput.Split(',');
列表页=新列表();
foreach(strArray中的字符串s)
{
字符串[]范围=s.Split('-');
如果(range.Length==2)
{
int startPage=int.Parse(范围[0]);
int endPage=int.Parse(范围[1]);

对于(int i=startPage;i您必须从字母表中删除数字部分。然后您可以使用此linq查询:

var txtRange = "16,18,22-30";
var tokens = txtRange.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(t => new { 
    Token = t, 
    Range =  t.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries)
})
.Select(x => new{ x.Token, x.Range, 
    RangeStart = int.Parse(x.Range[0]),
    RangeEnd = x.Range.Length > 1 ? int.Parse(x.Range[1]) : int.Parse(x.Range[0])
});

int min = tokens.Min(x => x.RangeStart);
int max = tokens.Max(x => x.RangeEnd);

var list = new List<String>() { "11", "11A", "12", "12A", "13", "14", "15", "19" };

var result = list.Select(s => new
{
    Str = s,
    Num = int.Parse(new string(s.Where(Char.IsDigit).ToArray()))
})
.Where(x => x.Num >= min && x.Num <= max);

foreach(var x in result)
    Console.WriteLine("String: {0} Numeric-Part: {1}", x.Str, x.Num);
var txtRange=“16,18,22-30”;
var tokens=txtRange.Split(新[]{',},StringSplitOptions.RemoveEmptyEntries)
.Select(t=>new{
令牌=t,
Range=t.Split(新[]{'-'},StringSplitOptions.RemoveEmptyEntries)
})
.Select(x=>new{x.标记,x.范围,
RangeStart=int.Parse(x.Range[0]),
RangeEnd=x.Range.Length>1?int.Parse(x.Range[1]):int.Parse(x.Range[0])
});
int min=tokens.min(x=>x.RangeStart);
int max=tokens.max(x=>x.RangeEnd);
var list=新列表(){“11”、“11A”、“12”、“12A”、“13”、“14”、“15”、“19”};
var结果=列表。选择(s=>new
{
Str=s,
Num=int.Parse(新字符串(s.Where(Char.IsDigit.ToArray()))
})

其中(x=>x.Num>=min&&x.Num 11,11A,12,12A,15-18应转换为[11,12,15,16,17,18]?输入
10-16,18,22-30
的数组元素应该是什么?数组应该是什么数据类型?抱歉,不,它仍然需要是11,11A,12,12A。但是如果用户键入,例如,11-15,19。如果我键入
11-12
,数组将变成11,11A,12,12A,13,14,15,19,这会导致
11,11A,12
还是
11,11A,12,12A?您是否有可用的数字和数字字母组合,例如在数组中?