【问题标题】:How can I tell that I'm at the last object in a foreach, in Qt我怎么知道我在 Qt 中的 foreach 中的最后一个对象
【发布时间】:2012-03-19 23:57:21
【问题描述】:

我想知道是否有人知道 Qt 中的库方法或函数,它会告诉您何时点击了 foreach 中的最后一个对象。

下面我正在滚动一个字符串列表,并且我在下面编造了一个名为“isLast()”的虚构方法:

foreach( QString a_string, string_list )
{
    if ( a_string.isLast() )   // does something like this exist?
    {
    ...
    }
}

有人知道是否存在类似“isLast()”的东西吗?

谢谢, 韦斯

【问题讨论】:

  • Last Element in ForEach的可能重复
  • 如果您对列表的最后一项感兴趣,则 foreach 循环可能不是正确的方法......您实际上想做什么?
  • 我想知道它是否在列表中滚动并且在最后一个。我想知道是否有 Qt 库方法可以告诉我这一点。请阅读问题。
  • 只需使用迭代器或索引即可。你问的是一个坏主意,因为从本质上讲,“foreach”意味着“我不关心订单”,而“last”意味着“当前是序列中的最后一个”。如果您使用对象的方法,它必须知道它是否是最后一个对象,这意味着它必须知道它在容器中。这就是为什么发明了迭代器。

标签: c++ qt qt4


【解决方案1】:

我没有在 QT 中看到 isLast() 风格的函数。你最好的选择可能是混合一些老式的反逻辑:

int str_count = 0;
int str_list_last_elem = string_list.size()-1;

foreach(QString a_string, string_list) {
    str_count++;
    if (str_count == str_list_last_elem) {
        ...
    }
}

【讨论】:

  • 是的,我在想这可能是我必须要做的。我只是希望某个地方的某个 Qt Guru 知道一些古老的尘土飞扬的古老说服方法。不过感谢您的帮助。
【解决方案2】:

如果string_list 中的字符串都有唯一值,您可以这样做:

foreach(QString a_string, string_list) {
    if(a_string == string_list.last()){
        // it's the last string
    }

    ...
}

否则,您将不得不按照@ascentury 的建议使用某种计数器。

【讨论】:

    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 2017-05-02
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多