首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为复选框编写代码以获得下面的模式输出

如何为复选框编写代码以获得下面的模式输出
EN

Stack Overflow用户
提问于 2013-09-12 10:24:11
回答 5查看 269关注 0票数 4

我正在开发c#应用程序,我希望完成以下任务:

我有12个复选框的12个项目和用户可以检查任何一个复选框。如果选中了复选框3,4,5,6,8,10,11,12,我想显示以下输出。

你选择了项目3-6,8,10-12。

规则:

当连续数字组计数为3或3以上时,显示分组(如3-6 )。

否则显示个人号码。8

EN

回答 5

Stack Overflow用户

发布于 2013-09-12 12:26:30

首先,我建议您在字符串中添加所有复选框的值,就像您已经显示的那样。

函数调用:

代码语言:javascript
运行
复制
 string data = "3,5,6,7,8,10,12";
 string res = GetResultString(data);

函数:

代码语言:javascript
运行
复制
    string GetResultString(string data)
    {
        string[] arrData = data.Split(',').ToArray();
        List<int> lstData = new List<int>();
        foreach (string item in arrData)
        {
            lstData.Add(Convert.ToInt16(item));
        }

        lstData.Sort();
        string finalStr = string.Empty;
        if (lstData.Count > 0)
        {
            int start = lstData[0];
            int end = start;
            finalStr = string.Empty;
            for (int index = 1; index < lstData.Count; index++)
            {
                if (end + 1 == lstData[index])
                {
                    end = lstData[index];
                }
                else
                {
                    finalStr += appendResult(start, end);
                    start = -1;
                }

                if (start == -1)
                {
                    start = lstData[index];
                    end = lstData[index];
                }
            }
            finalStr += appendResult(start, end);
        }
        finalStr = finalStr.Trim(',');
        return finalStr;
    }

    string appendResult(int start,int end)
    {
        string res = string.Empty;
        if (end - start > 1)
        {
            res += start + "-" + end.ToString() + ",";
            start = -1;
        }
        else
        {
            while (start <= end)
            {
                res += start.ToString() + ",";
                start++;
            }
        }
        return res;
    }

希望这能完成你的工作,

票数 1
EN

Stack Overflow用户

发布于 2013-09-12 10:53:26

我想您是用数组(新的.)完成了复选框的。如果不这么做的话.

代码语言:javascript
运行
复制
int min=13;
int max=0;
string s = "";

for (int i = 0; i<12; i++)
{
    if (cb[i].checked && i<min)
        min = i;
    else if (cb[i].checked == false)
        if (min != 13)
        {
            max = i-1;
            s = s + min.ToString() + "-" + max.ToString() + " ";
            min = 13;
        }
}

if (cb[11].checked) s = s + min.ToString() + "-12"; // for case the last one is checked
// s contains your data

(我没有检查过,但我认为应该是这样的。)

票数 0
EN

Stack Overflow用户

发布于 2013-09-12 12:25:51

试试这个..。它会起作用的我测试过

我还没有创建复选框,所以应该检查选中了哪个复选框,从选中的复选框3、4、5、6、8、10、11、12中获取字符串

代码语言:javascript
运行
复制
       string str1 = "3,4,5,6,8,10,11,12";
        string[] strArr = str1.Split(',');
        List<string> strFinal = new List<string>();
        int[] myInts = Array.ConvertAll(strArr, s => int.Parse(s));
        int arrLn = myInts.Length;
        Array.Sort(myInts);
        int intPrevVal = myInts[0];
        int intPrevDiff = myInts[0];
        int seriesCount = 1;
        strFinal.Add(Convert.ToString(myInts[0]));

        for (int j = 1; j < arrLn; j++)
        {
            int intCurr = myInts[j];
            if (intCurr - intPrevVal == 1)
            {
                seriesCount++;
            }
            else
            {
                if (seriesCount >= 3)
                {
                    strFinal[strFinal.Count - 1] = strFinal[strFinal.Count - 1] + "-" + intPrevVal;
                    seriesCount = 1;
                }
                else if (seriesCount == 2)
                {
                    strFinal.Add(Convert.ToString(myInts[j - 1]));
                    seriesCount = 1;
                    //strFinal.Add(Convert.ToString(myInts[j]));
                }
                strFinal.Add(Convert.ToString(myInts[j]));
            }
            intPrevVal = intCurr;
        }
        if (seriesCount >= 3)
        {
            strFinal[strFinal.Count - 1] = strFinal[strFinal.Count - 1] + "-" + myInts[arrLn - 1];
        }
        else if (seriesCount == 2)
        {                
            strFinal.Add(Convert.ToString(myInts[arrLn - 1]));
        }
        string FinalAns = string.Join(",", strFinal.ToArray());
        Response.Write(FinalAns);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18761685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档