标签: iterator

加入一组有序整数的Python迭代器

这是一个看似简单的问题:给定一个按升序生成整数序列的迭代器列表,编写一个简洁的生成器,只生成每个序列中出现的整数.

在昨晚阅读了几篇论文之后,我决定在Python中破解一个完全最小的全文索引器,如此处所示(尽管该版本现在已经很老了).

我的问题在于search()函数,它必须迭代每个发布列表并仅产生每个列表上显示的文档ID.正如您从上面的链接中看到的那样,我当前的非递归"工作"尝试非常糟糕.

示例:

postings = [[1,   100, 142, 322, 12312],
            [2,   100, 101, 322, 1221],
            [100, 142, 322, 956, 1222]]
Run Code Online (Sandbox Code Playgroud)

应该产量:

[100, 322]
Run Code Online (Sandbox Code Playgroud)

至少有一个优雅的递归函数解决方案,但我想尽可能避免这种情况.但是,一个涉及嵌套生成器表达式,itertools滥用或任何其他类型的代码高尔夫的解决方案非常受欢迎.:-)

应该可以安排函数只需要与最小列表中的项目一样多的步骤,并且不将整个整数集吸入内存.将来,这些列表可能从磁盘读取,并且大于可用RAM.

在过去的30分钟里,我对我的舌尖有了一个想法,但我无法将其纳入代码中.请记住,这只是为了好玩!

python iterator join code-golf generator

17
推荐指数
3
解决办法
2094
查看次数

为什么我们使用entrySet()方法并使用返回的集来迭代映射?

通常我们写这个来从地图中获取键和值.

Map m=new HashMap();
Set s=map.entrySet();
Iterator i=s.iterator()
while(s.hasNext()){
    Map.Entry m= (map.Entry) s.next();
    System.out.println(""+m.getKey()+""+ m.getValue());
}
Run Code Online (Sandbox Code Playgroud)

为什么我们使用set迭代为什么不直接映射?

java collections dictionary iterator

17
推荐指数
2
解决办法
6万
查看次数

从迭代器返回对象的引用

我想从向量返回一个对象的引用,该对象在一个迭代器对象中.我怎样才能做到这一点?

我尝试了以下方法:

Customer& CustomerDB::getCustomerById (const string& id) {
    vector<Customer>::iterator i;
    for (i = customerList.begin(); i != customerList.end() && !(i->getId() == id); ++i);

    if (i != customerList.end())
        return *i; // is this correct?
    else
        return 0; // getting error here, cant return 0 as reference they say
}
Run Code Online (Sandbox Code Playgroud)

在代码中,customerList是客户的向量,函数getId返回客户的id.

是对的*i吗?我怎么能返回0或null作为参考?

c++ null iterator reference vector

17
推荐指数
1
解决办法
3万
查看次数

迭代器块和继承

给定具有以下接口的基类:

public class Base
{
    public virtual IEnumerable<string> GetListOfStuff()
    {
        yield return "First";
        yield return "Second";
        yield return "Third";
    }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个覆盖该方法的派生类,并添加自己的东西,如下所示:

public class Derived : Base
{
    public override IEnumerable<string> GetListOfStuff()
    {
        foreach (string s in base.GetListOfStuff())
        {
            yield return s;
        }

        yield return "Fourth";
        yield return "Fifth";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我受到了警告,"无法验证通过迭代器中的基本关键字访问成员".

那么这个问题的解决方案是什么?

c# inheritance iterator

16
推荐指数
2
解决办法
1786
查看次数

C++中范围的状态是什么?

有时我厌倦了所有这些my_vector.begin(), my_vector.end()噪音.去年在boostcon上,Andrei Alexandrescu的主题演讲名为Iterators Must Go(视频)

将范围引入C++是否有任何进展,我终于可以说了std::sort(my_vector)吗?

c++ iterator stl range c++11

16
推荐指数
1
解决办法
1027
查看次数

如何将矢量分成n个"几乎相等"的部分

我有一个问题,我想使用ImageMagick的convert.exe合并大量的图像,但在Windows下我有一个8192字节长的命令行限制.

我的解决方案是将任务拆分为更小的子任务,运行它们,并执行将它们组合在一起的最终任务.

我的想法是编写一个函数,它接受一个图像矢量和一个整数,并将矢量分成n个子矢量,所有子矢量都具有"几乎相等"的部分.

因此,例如,如果我想将11分成3组,那么它将是4-4-3.

你能告诉我怎么用C++做的吗?我的意思是,写一个函数

split_vec( const vector<image> &images, int split )
Run Code Online (Sandbox Code Playgroud)

哪个分裂?

另外,如果我不需要创建新的向量,只是遍历子部分,你能告诉我最有效的方法吗?喜欢的std::substr功能有std::string

注意:我已经在项目中使用了Boost,所以如果在Boost中有一些不错的工具,那么它对我来说是完美的.

c++ boost iterator vector visual-studio-2010

16
推荐指数
2
解决办法
1万
查看次数

如何在Scala中复制迭代器?

关于重复

这不是如何克隆迭代器的重复?

请不要盲目关闭这个问题,所谓的重复给出所有的答案不要工作.OP负责另一个问题,显然,答案符合HIS问题,但不是我的问题.

不是每个类似的问题都是重复的,在SE上有"扩展问题"这样的特征,唯一的方法是再次询问同一主题,以获得不同的,有效的答案.

问题

我有迭代器.我想得到它的复制(复制),然后我可以完全独立地继续原始和复制.

重要

通过反射或序列化进行复制是不行的(性能损失).

var list = List(1,2,3,4,5)
var it1 = list.iterator
it1.next()

var it2 = it1   // (*)
it2.next()

println(it1.next())
Run Code Online (Sandbox Code Playgroud)

这将简单地引用it1,因此当改变it1时,it2也会改变,反之亦然.

上面的例子使用List,我目前正在与HashMap斗争,但问题是一般的 - 只是迭代器.

方法#1

如果你编辑行(*)并写:

var it2 = it1.toList.iterator
Run Code Online (Sandbox Code Playgroud)

(这被建议作为链接问题中的解决方案)执行程序时抛出异常.

方法#2

"你拿这份清单......".不,我没有.我没有列表,我有迭代器.一般来说,我不知道任何关于迭代器的基础的集合,我唯一拥有的是迭代器.我必须"分叉"它.

iterator scala

16
推荐指数
3
解决办法
4108
查看次数

如何在耗尽时让生成器/迭代器评估为False?

Python中的其他空对象评估为False - 我如何才能获得迭代器/生成器呢?

python iterator boolean generator

16
推荐指数
2
解决办法
3576
查看次数

PHP接口IteratorAggregate vs Iterator?

IteratorAggregate是一个创建外部迭代器接口:

class myData implements IteratorAggregate
{
    public $property1 = "Public property one";
    public $property2 = "Public property two";
    public $property3 = "Public property three";

    public function __construct()
    {
        $this->property4 = "last property";
    }

    public function getIterator()
    {
        return new ArrayIterator($this);
    }
}

$obj = new myData;
Run Code Online (Sandbox Code Playgroud)

并且您将能够使用foreach以下方式遍历对象:

foreach($obj as $key => $value) {
    var_dump($key, $value);
    echo "\n";
}
Run Code Online (Sandbox Code Playgroud)

虽然Iterator外部迭代器或对象接口,可以在内部迭代:

class myIterator implements Iterator
{
    private $position …
Run Code Online (Sandbox Code Playgroud)

php arrays iterator traversal

16
推荐指数
4
解决办法
8104
查看次数

如果它们不是随机访问,如何告诉advance()在输入迭代器上使用+ =运算符

考虑一个输入迭代器join_iterator:它迭代其他范围的串联.调用++i反复可以比简单的慢i += n.

尽管如此,大多数C++代码都要求使用任意数量的迭代器,当迭代器不是随机访问时std::advance,它会自动转向调用++i.

(可悲的是,大多数人使用std::advance(i, n)而不是using std::advance; advance(i, n),所以我不能只advance为我的迭代器供应并依赖ADL.)

另一方面,我不能使用++=因为输入迭代器不必实现它们.

所以问题是:在以下情况下,我将如何支持这种情况:

  • 实现这样的迭代器?

  • 使用可能具有优化的输入迭代器operator +=

(注意advance并且+这不是唯一重要的情况 - distance并且-具有相同的问题.)

c++ iterator

16
推荐指数
1
解决办法
303
查看次数