【问题标题】:C# / .NET / ASPX : Display last 5 in an arrayC#/.NET/ASPX:在数组中显示最后 5 个
【发布时间】:2016-02-11 09:05:03
【问题描述】:

我已经成功地将最近搜索中保存的 Cookie 拆分为一个包含所有最近搜索的数组,我现在只想取出最后 5 个搜索,这将是数组中的最新搜索

到目前为止我有:

var output = new StringBuilder();
        if (Request.Cookies["UserSettings"] != null)
        {
            string userSettings = Request.Cookies["UserSettings"].Value;
            output.Append("<div style='float: right; width: 55%;'> Your recently searched: <ul>");
            {
                try
                {
                    string[] tokens = userSettings.Split(':');
                    int count = 0;
                    int refer = userSettings.Length - 5;
                    foreach (String searchHist in tokens)
                    {
                        if(userSettings.Length > refer)
                        {
                            if (count > 4)
                            {
                                output.Append("<li>" + searchHist + "</li>");
                            }

                            count++;

                        }
                    }
                }
                catch (Exception ex)
                {
                    output.Append("<li>" + userSettings + "</li>");
                }
                finally
                {
                    output.Append("</div>");
                    recentSearch.Text = output.ToString();
                }
            }
        }

但这似乎只是跳过了数组中的前 5 个。有没有更简单的方法来拉出数组中的最后 5 个字符串?非常感谢。

编辑:数组看起来像这样 - first:second:third:forth:fifth:sixth 所以在这种情况下,我需要它来显示:second third forthfifth

【问题讨论】:

标签: c# asp.net arrays


【解决方案1】:

要从数组中取出最后 5 个元素,您可以使用 linq 并跳过第一个 length-5 元素,如下所示:

foreach (String searchHist in tokens.Skip(tokens.Length - 5))
{
    if(userSettings.Length > refer)
    {
        output.Append("<li>" + searchHist + "</li>");
    }
}

在此之前您可能需要检查长度是否至少为 5:

int toSkip = tokens.Length - 5;
if (toSkip < 0) toSkip = 0;
foreach (String searchHist in tokens.Skip(toSkip))
   ...

【讨论】:

  • 太棒了,这成功了!谢谢!我将研究Skip 的想法以了解:)
  • @KyleE4K 背后没有什么大创意。数组是一个IEnumerableSkip 是一个扩展方法,它返回一个新的IEnumerable,它跳过源IEnumerable 的前n 个元素。 Here is the MSDN documentation
【解决方案2】:

如果数组总是如下所示,请尝试插入 foreach 循环:first:second:third:forth:fifth:sixth 并且您想要 secondthirdforthfifth

for (int i = tokens.Length - 6, i < tokens.Length; i++)
{
    string searchHist = tokens[i];

    if(userSettings.Length > refer)
    {
        output.Append("<li>" + searchHist + "</li>");
    }
}

【讨论】:

  • 这只是他想要达到的目标的一个例子。该数组不仅包含 5-6 项
  • 你想说的是,它实际上有一个未定义的 X 数量的东西,因为据我所知,这个人可以搜索 55 个东西。但我感谢您的帮助
  • 他说:“数组看起来像这样 - first:second:third:forth:fifth:sixth 所以在这种情况下,我需要它来显示:第二个第三个第四个和第五个。” - 所以我做到了
  • @KyleE4K :你说,在那种情况下,你需要从第二个到第五个,那么第六个呢?这不是最后五个 - 或者你真的需要最后五个?
猜你喜欢
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多