首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中断嵌套循环直到满足下一个条件

中断嵌套循环直到满足下一个条件
EN

Stack Overflow用户
提问于 2015-08-05 03:01:53
回答 2查看 53关注 0票数 3

我有下面的代码,我取了一个列表,并将其平分为三列:

代码语言:javascript
复制
<div>
    @{
        double num = listing.Count() / 3.0;
        double blockSize = Math.Ceiling(num);
        for (int i = 0; i < Math.Ceiling(listing.Count() / blockSize); i++)
        {

            <div class="col-sm-4">
                @for (int j = i * (int)blockSize; j < (i * blockSize) + (int)blockSize && j < listing.Count(); j++)
                {
                    /// How can I only display this header once?
                    foreach(string letter in letters)
                    {
                        if (letter.ToLower() == listing.ElementAt(j).Title.Substring(0,1).ToLower())
                        {    
                            <h5 class="title"><a name="@letter.ToLower()">@letter.ToUpper()</a></h5>
                        }
                    }


                    <p><a href="#">@listing.ElementAt(j).Value</a></p>

                }                                    
            </div>
        }                       
    }
</div>

我的问题是,如何将嵌套的foreach循环编码为真(每个字母匹配一次)?产生输出,如:

代码语言:javascript
复制
<div class="row colIndentTop">
    <div class="col-sm-4">
        <h5 class="title"><a name="a">A</a></h5>
        <p><a href="#">Alice</a></p>
        <p><a href="#">Amy</a></p>


        <h5 class="title"><a name="d">D</a></h5>
        <p><a href="#">David</a></p>

        <h5 class="title"><a name="f">F</a></h5>
        <p><a href="#">Frank</a></p>

        <h5 class="title"><a name="i">I</a></h5>
        <p><a href="#">Ibrahim</a></p>
    </div>
    <div class="col-sm-4">
        <h5 class="title"><a name="n">N</a></h5>
        <p><a href="#">Nancy</a></p>

        <h5 class="title"><a name="o">O</a></h5>
        <p><a href="#">Olive</a></p>

        <h5 class="title"><a name="p">P</a></h5>
        <p><a href="#">Paul</a></p>                        
        <p><a href="#">Patrick</a></p>
    </div>
    <div class="col-sm-4">
        <p><a href="#">Patricia</a></p>

        <h5 class="title"><a name="s">S</a></h5>
        <p><a href="#">Sally</a></p>
        <p><a href="#">Sean</a></p>

        <h5 class="title"><a name="t">T</a></h5>
        <p><a href="#">Thomas</a></p>
    </div>
</div>

而不是:

代码语言:javascript
复制
<div class="row colIndentTop">
    <div class="col-sm-4">
        <h5 class="title"><a name="a">A</a></h5>
        <p><a href="#">Alice</a></p>
        <h5 class="title"><a name="a">A</a></h5>
        <p><a href="#">Amy</a></p>


        <h5 class="title"><a name="d">D</a></h5>
        <p><a href="#">David</a></p>

        <h5 class="title"><a name="f">F</a></h5>
        <p><a href="#">Frank</a></p>

        <h5 class="title"><a name="i">I</a></h5>
        <p><a href="#">Ibrahim</a></p>
    </div>
    <div class="col-sm-4">
        <h5 class="title"><a name="n">N</a></h5>
        <p><a href="#">Nancy</a></p>

        <h5 class="title"><a name="o">O</a></h5>
        <p><a href="#">Olive</a></p>

        <h5 class="title"><a name="p">P</a></h5>
        <p><a href="#">Paul</a></p>   
        <h5 class="title"><a name="p">P</a></h5>                     
        <p><a href="#">Patrick</a></p>
    </div>
    <div class="col-sm-4">
        <h5 class="title"><a name="p">P</a></h5>
        <p><a href="#">Patricia</a></p>

        <h5 class="title"><a name="s">S</a></h5>
        <p><a href="#">Sally</a></p>
        <h5 class="title"><a name="s">S</a></h5>
        <p><a href="#">Sean</a></p>

        <h5 class="title"><a name="t">T</a></h5>
        <p><a href="#">Thomas</a></p>
    </div>
</div>

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-05 03:17:00

井。对于您拥有的整个代码,可能有更优雅的解决方案,但是对于您的具体问题,您可以添加一个简单的检查。

这段代码将把字母值添加到变量thisLetter中,并检查下一个程序以确保您的信函是新的(否则letter != thisLetter将失败,它将跳过添加h5)。

代码语言:javascript
复制
var thisLetter = '';

foreach(string letter in letters)
{
    if ((letter.ToLower() == listing.ElementAt(j).Title.Substring(0,1).ToLower()) && letter != thisLetter)
    {    
        <h5 class="title"><a name="@letter.ToLower()">@letter.ToUpper()</a></h5>
    }
    thisLetter = letter;
}

您也可以像下面这样使用继续逻辑来清理它,这不会创建h5,也会跳过不必要的将值重新分配给thisLetter的操作。作为解释,continue将跳到for循环的下一次迭代,而不会在循环中的continue之后执行任何代码。

代码语言:javascript
复制
var thisLetter = '';

foreach(string letter in letters)
{
    //Note!: The if logic is 'opposite' in this structure.
    if ((letter.ToLower() != listing.ElementAt(j).Title.Substring(0,1).ToLower()) || letter == thisLetter)
        continue;

    <h5 class="title"><a name="@letter.ToLower()">@letter.ToUpper()</a></h5>
    thisLetter = letter;
}
票数 1
EN

Stack Overflow用户

发布于 2015-08-05 03:10:17

首先,把你的名字(indexNavigation)按字母排序。然后这样做(可能无法编译,我现在没有IDE ):

代码语言:javascript
复制
<div>
    @{
        double num = listing.Count() / 3.0;
        double blockSize = Math.Ceiling(num);
        char currentLetter = '.'
        for (int i = 0; i < Math.Ceiling(listing.Count() / blockSize); i++)
        {

            <div class="col-sm-4">
                @for (int j = i * (int)blockSize; j < (i * blockSize) + (int)blockSize && j < listing.Count(); j++)
                {
                    var name = indexNavigation.ElementAt(j).Title;
                    if (currentLetter != name.Title.Substring(0,1).ToLower()[0])
                    {    
                        <h5 class="title"><a name="@letter.ToLower()">@letter.ToUpper()</a></h5>
                        currentLetter = name.Title.Substring(0,1).ToLower()[0];
                    }

                    <p><a href="Faculty_and_Research/Academic_Careers.html">@indexNavigation.ElementAt(j).Title</a></p>    
                }                                    
            </div>
        }                       
    }
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31822712

复制
相关文章

相似问题

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